diff options
| author | Marijn Tamis <[email protected]> | 2017-04-28 14:19:07 +0200 |
|---|---|---|
| committer | Marijn Tamis <[email protected]> | 2017-04-28 14:19:07 +0200 |
| commit | b350eb5f4d44e8448115796144375d79438d74ae (patch) | |
| tree | 8e102e8c28f45a1b87bd335ceee4f33c3d4ee7c2 /NvCloth/src | |
| parent | Add visual samples. (diff) | |
| download | nvcloth-b350eb5f4d44e8448115796144375d79438d74ae.tar.xz nvcloth-b350eb5f4d44e8448115796144375d79438d74ae.zip | |
NvCloth 1.1.0 Release. (22041545)
Diffstat (limited to 'NvCloth/src')
44 files changed, 1906 insertions, 26158 deletions
diff --git a/NvCloth/src/Allocator.cpp b/NvCloth/src/Allocator.cpp index 33a593e..2d082ab 100644 --- a/NvCloth/src/Allocator.cpp +++ b/NvCloth/src/Allocator.cpp @@ -29,7 +29,6 @@ #include "NvCloth/Allocator.h" -#include "PsAllocator.h" namespace nv { diff --git a/NvCloth/src/ClothClone.h b/NvCloth/src/ClothClone.h index bdfdb2d..386fee6 100644 --- a/NvCloth/src/ClothClone.h +++ b/NvCloth/src/ClothClone.h @@ -125,92 +125,88 @@ inline Range<const uint32_t> getSelfCollisionIndices(const SwCloth& cloth) } // cloth conversion -template <typename DstFactoryType, typename SrcImplType> -typename DstFactoryType::ImplType* convertCloth(DstFactoryType& dstFactory, const SrcImplType& srcImpl) +template <typename DstFactoryType, typename SrcClothType> +typename DstFactoryType::ClothType* convertCloth(DstFactoryType& dstFactory, const SrcClothType& srcCloth) { typedef typename DstFactoryType::FabricType DstFabricType; - typedef typename DstFactoryType::ImplType DstImplType; - typedef typename DstImplType::ClothType DstClothType; - typedef typename SrcImplType::ClothType SrcClothType; + typedef typename DstFactoryType::ClothType DstClothType; - const SrcClothType& srcCloth = srcImpl.mCloth; const Factory& srcFactory = srcCloth.mFactory; typename DstClothType::ContextLockType dstLock(dstFactory); typename SrcClothType::ContextLockType srcLock(srcCloth.mFactory); // particles - MappedRange<const physx::PxVec4> curParticles = srcImpl.getCurrentParticles(); + MappedRange<const physx::PxVec4> curParticles = srcCloth.getCurrentParticles(); // fabric DstFabricType& dstFabric = *convertFabric(srcCloth.mFabric, dstFactory); // create new cloth - DstImplType* dstImpl = static_cast<DstImplType*>(dstFactory.createCloth(curParticles, dstFabric)); - DstClothType& dstCloth = dstImpl->mCloth; + DstClothType* dstCloth = static_cast<DstClothType*>(dstFactory.createCloth(curParticles, dstFabric)); dstFabric.decRefCount(); // copy across common parameters - copy(dstCloth, srcCloth); + copy(*dstCloth, srcCloth); // copy across previous particles - MappedRange<const physx::PxVec4> prevParticles = srcImpl.getPreviousParticles(); - memcpy(dstImpl->getPreviousParticles().begin(), prevParticles.begin(), prevParticles.size() * sizeof(physx::PxVec4)); + MappedRange<const physx::PxVec4> prevParticles = srcCloth.getPreviousParticles(); + memcpy(dstCloth->getPreviousParticles().begin(), prevParticles.begin(), prevParticles.size() * sizeof(physx::PxVec4)); // copy across transformed phase configs - setPhaseConfigs(dstCloth, getPhaseConfigs(srcCloth)); + setPhaseConfigs(*dstCloth, getPhaseConfigs(srcCloth)); // collision data - Vector<physx::PxVec4>::Type spheres(srcImpl.getNumSpheres(), physx::PxVec4(0.0f)); + Vector<physx::PxVec4>::Type spheres(srcCloth.getNumSpheres(), physx::PxVec4(0.0f)); physx::PxVec4* spherePtr = spheres.empty() ? 0 : &spheres.front(); Range<physx::PxVec4> sphereRange(spherePtr, spherePtr + spheres.size()); - Vector<uint32_t>::Type capsules(srcImpl.getNumCapsules() * 2); + Vector<uint32_t>::Type capsules(srcCloth.getNumCapsules() * 2); Range<uint32_t> capsuleRange = makeRange(capsules); - Vector<physx::PxVec4>::Type planes(srcImpl.getNumPlanes(), physx::PxVec4(0.0f)); + Vector<physx::PxVec4>::Type planes(srcCloth.getNumPlanes(), physx::PxVec4(0.0f)); physx::PxVec4* planePtr = planes.empty() ? 0 : &planes.front(); Range<physx::PxVec4> planeRange(planePtr, planePtr + planes.size()); - Vector<uint32_t>::Type convexes(srcImpl.getNumConvexes()); + Vector<uint32_t>::Type convexes(srcCloth.getNumConvexes()); Range<uint32_t> convexRange = makeRange(convexes); - Vector<physx::PxVec3>::Type triangles(srcImpl.getNumTriangles() * 3, physx::PxVec3(0.0f)); + Vector<physx::PxVec3>::Type triangles(srcCloth.getNumTriangles() * 3, physx::PxVec3(0.0f)); physx::PxVec3* trianglePtr = triangles.empty() ? 0 : &triangles.front(); Range<physx::PxVec3> triangleRange(trianglePtr, trianglePtr + triangles.size()); - srcFactory.extractCollisionData(srcImpl, sphereRange, capsuleRange, planeRange, convexRange, triangleRange); - dstImpl->setSpheres(sphereRange, 0, 0); - dstImpl->setCapsules(capsuleRange, 0, 0); - dstImpl->setPlanes(planeRange, 0, 0); - dstImpl->setConvexes(convexRange, 0, 0); - dstImpl->setTriangles(triangleRange, 0, 0); + srcFactory.extractCollisionData(srcCloth, sphereRange, capsuleRange, planeRange, convexRange, triangleRange); + dstCloth->setSpheres(sphereRange, 0, 0); + dstCloth->setCapsules(capsuleRange, 0, 0); + dstCloth->setPlanes(planeRange, 0, 0); + dstCloth->setConvexes(convexRange, 0, 0); + dstCloth->setTriangles(triangleRange, 0, 0); // motion constraints, copy directly into new cloth buffer - if (srcImpl.getNumMotionConstraints()) - srcFactory.extractMotionConstraints(srcImpl, dstImpl->getMotionConstraints()); + if (srcCloth.getNumMotionConstraints()) + srcFactory.extractMotionConstraints(srcCloth, dstCloth->getMotionConstraints()); // separation constraints, copy directly into new cloth buffer - if (srcImpl.getNumSeparationConstraints()) - srcFactory.extractSeparationConstraints(srcImpl, dstImpl->getSeparationConstraints()); + if (srcCloth.getNumSeparationConstraints()) + srcFactory.extractSeparationConstraints(srcCloth, dstCloth->getSeparationConstraints()); // particle accelerations - if (srcImpl.getNumParticleAccelerations()) + if (srcCloth.getNumParticleAccelerations()) { Range<const physx::PxVec4> accelerations = getParticleAccelerations(srcCloth); - memcpy(dstImpl->getParticleAccelerations().begin(), accelerations.begin(), + memcpy(dstCloth->getParticleAccelerations().begin(), accelerations.begin(), accelerations.size() * sizeof(physx::PxVec4)); } // self-collision indices - dstImpl->setSelfCollisionIndices(getSelfCollisionIndices(srcCloth)); + dstCloth->setSelfCollisionIndices(getSelfCollisionIndices(srcCloth)); // rest positions - Vector<physx::PxVec4>::Type restPositions(srcImpl.getNumRestPositions()); - srcFactory.extractRestPositions(srcImpl, makeRange(restPositions)); - dstImpl->setRestPositions(makeRange(restPositions)); + Vector<physx::PxVec4>::Type restPositions(srcCloth.getNumRestPositions()); + srcFactory.extractRestPositions(srcCloth, makeRange(restPositions)); + dstCloth->setRestPositions(makeRange(restPositions)); // virtual particles - if (srcImpl.getNumVirtualParticles()) + if (srcCloth.getNumVirtualParticles()) { - Vector<Vec4u>::Type indices(srcImpl.getNumVirtualParticles()); - Vector<physx::PxVec3>::Type weights(srcImpl.getNumVirtualParticleWeights(), physx::PxVec3(0.0f)); + Vector<Vec4u>::Type indices(srcCloth.getNumVirtualParticles()); + Vector<physx::PxVec3>::Type weights(srcCloth.getNumVirtualParticleWeights(), physx::PxVec3(0.0f)); uint32_t(*indicesPtr)[4] = indices.empty() ? 0 : &array(indices.front()); Range<uint32_t[4]> indicesRange(indicesPtr, indicesPtr + indices.size()); @@ -218,12 +214,12 @@ typename DstFactoryType::ImplType* convertCloth(DstFactoryType& dstFactory, cons physx::PxVec3* weightsPtr = weights.empty() ? 0 : &weights.front(); Range<physx::PxVec3> weightsRange(weightsPtr, weightsPtr + weights.size()); - srcFactory.extractVirtualParticles(srcImpl, indicesRange, weightsRange); + srcFactory.extractVirtualParticles(srcCloth, indicesRange, weightsRange); - dstImpl->setVirtualParticles(indicesRange, weightsRange); + dstCloth->setVirtualParticles(indicesRange, weightsRange); } - return dstImpl; + return dstCloth; } } // namespace cloth diff --git a/NvCloth/src/ClothImpl.h b/NvCloth/src/ClothImpl.h index 85d201a..0c2b362 100644 --- a/NvCloth/src/ClothImpl.h +++ b/NvCloth/src/ClothImpl.h @@ -41,6 +41,11 @@ namespace nv namespace cloth { +template<typename T> +class ClothTraits +{ +}; + // SwCloth or CuCloth aggregate implementing the Cloth interface // Member specializations are implemented in Sw/CuCloth.cpp template <typename T> @@ -49,30 +54,20 @@ class ClothImpl : public Cloth ClothImpl(const ClothImpl&); public: - ClothImpl& operator = (const ClothImpl&); - + ClothImpl() {} typedef T ClothType; - typedef typename ClothType::FactoryType FactoryType; - typedef typename ClothType::FabricType FabricType; - typedef typename ClothType::ContextLockType ContextLockType; + typedef typename ClothTraits<ClothType>::FactoryType FactoryType; + typedef typename ClothTraits<ClothType>::FabricType FabricType; + typedef typename ClothTraits<ClothType>::ContextLockType ContextLockType; - ClothImpl(Factory&, Fabric&, Range<const physx::PxVec4>); - ClothImpl(Factory&, const ClothImpl&); + ClothImpl& operator = (const ClothImpl&); - virtual Cloth* clone(Factory& factory) const; + ClothType* getChildCloth() { return static_cast<T*>(this); } + ClothType const* getChildCloth() const { return static_cast<T const*>(this); } virtual Fabric& getFabric() const; virtual Factory& getFactory() const; - virtual uint32_t getNumParticles() const; - virtual void lockParticles() const; - virtual void unlockParticles() const; - virtual MappedRange<physx::PxVec4> getCurrentParticles(); - virtual MappedRange<const physx::PxVec4> getCurrentParticles() const; - virtual MappedRange<physx::PxVec4> getPreviousParticles(); - virtual MappedRange<const physx::PxVec4> getPreviousParticles() const; - virtual GpuParticles getGpuParticles(); - virtual void setTranslation(const physx::PxVec3& trans); virtual void setRotation(const physx::PxQuat& rot); @@ -108,8 +103,6 @@ class ClothImpl : public Cloth virtual void setAcceleationFilterWidth(uint32_t); virtual uint32_t getAccelerationFilterWidth() const; - virtual void setPhaseConfig(Range<const PhaseConfig> configs); - virtual void setSpheres(Range<const physx::PxVec4>, uint32_t first, uint32_t last); virtual uint32_t getNumSpheres() const; @@ -134,8 +127,6 @@ class ClothImpl : public Cloth virtual void setFriction(float friction); virtual float getFriction() const; - virtual void setVirtualParticles(Range<const uint32_t[4]>, Range<const physx::PxVec3>); - virtual uint32_t getNumVirtualParticles() const; virtual uint32_t getNumVirtualParticleWeights() const; virtual void setTetherConstraintScale(float scale); @@ -158,8 +149,6 @@ class ClothImpl : public Cloth virtual void clearInterpolation(); - virtual Range<physx::PxVec4> getParticleAccelerations(); - virtual void clearParticleAccelerations(); virtual uint32_t getNumParticleAccelerations() const; virtual void setWindVelocity(physx::PxVec3); @@ -174,7 +163,6 @@ class ClothImpl : public Cloth virtual void setSelfCollisionStiffness(float); virtual float getSelfCollisionStiffness() const; - virtual void setSelfCollisionIndices(Range<const uint32_t>); virtual uint32_t getNumSelfCollisionIndices() const; virtual void setRestPositions(Range<const physx::PxVec4>); @@ -192,6 +180,7 @@ class ClothImpl : public Cloth virtual uint32_t getSleepPassCount() const; virtual bool isAsleep() const; virtual void putToSleep(); + virtual bool isSleeping() const; virtual void wakeUp(); virtual void setUserData(void*); @@ -201,116 +190,125 @@ class ClothImpl : public Cloth template <typename U> MappedRange<U> getMappedParticles(U* data) const; - ClothType mCloth; +public: //Fields shared between all cloth classes + physx::PxVec3 mParticleBoundsCenter; + physx::PxVec3 mParticleBoundsHalfExtent; + + physx::PxVec3 mGravity; + physx::PxVec3 mLogDamping; + physx::PxVec3 mLinearLogDrag; + physx::PxVec3 mAngularLogDrag; + physx::PxVec3 mLinearInertia; + physx::PxVec3 mAngularInertia; + physx::PxVec3 mCentrifugalInertia; + float mSolverFrequency; + float mStiffnessFrequency; + + physx::PxTransform mTargetMotion; + physx::PxTransform mCurrentMotion; + physx::PxVec3 mLinearVelocity; + physx::PxVec3 mAngularVelocity; + + float mPrevIterDt; + MovingAverage mIterDtAvg; + + // wind + physx::PxVec3 mWind; + float mDragLogCoefficient; + float mLiftLogCoefficient; + + // sleeping + uint32_t mSleepTestInterval; // how often to test for movement + uint32_t mSleepAfterCount; // number of tests to pass before sleep + float mSleepThreshold; // max movement delta to pass test + uint32_t mSleepPassCounter; // how many tests passed + uint32_t mSleepTestCounter; // how many iterations since tested }; -class SwCloth; -typedef ClothImpl<SwCloth> SwClothImpl; - -class CuCloth; -typedef ClothImpl<CuCloth> CuClothImpl; - -class DxCloth; -typedef ClothImpl<DxCloth> DxClothImpl; - -template <typename T> -ClothImpl<T>::ClothImpl(Factory& factory, Fabric& fabric, Range<const physx::PxVec4> particles) -: mCloth(static_cast<FactoryType&>(factory), static_cast<FabricType&>(fabric), particles) -{ - // fabric and cloth need to be created by the same factory - NV_CLOTH_ASSERT(&fabric.getFactory() == &factory); -} - -template <typename T> -ClothImpl<T>::ClothImpl(Factory& factory, const ClothImpl& impl) -: mCloth(static_cast<FactoryType&>(factory), impl.mCloth) -{ -} - template <typename T> inline Fabric& ClothImpl<T>::getFabric() const { - return mCloth.mFabric; + return getChildCloth()->mFabric; } template <typename T> inline Factory& ClothImpl<T>::getFactory() const { - return mCloth.mFactory; + return getChildCloth()->mFactory; } template <typename T> inline void ClothImpl<T>::setTranslation(const physx::PxVec3& trans) { physx::PxVec3 t = reinterpret_cast<const physx::PxVec3&>(trans); - if (t == mCloth.mTargetMotion.p) + if (t == mTargetMotion.p) return; - mCloth.mTargetMotion.p = t; - mCloth.wakeUp(); + mTargetMotion.p = t; + wakeUp(); } template <typename T> inline void ClothImpl<T>::setRotation(const physx::PxQuat& q) { - if ((q - mCloth.mTargetMotion.q).magnitudeSquared() == 0.0f) + if ((q - mTargetMotion.q).magnitudeSquared() == 0.0f) return; - mCloth.mTargetMotion.q = q; - mCloth.wakeUp(); + mTargetMotion.q = q; + wakeUp(); } template <typename T> inline const physx::PxVec3& ClothImpl<T>::getTranslation() const { - return mCloth.mTargetMotion.p; + return mTargetMotion.p; } template <typename T> inline const physx::PxQuat& ClothImpl<T>::getRotation() const { - return mCloth.mTargetMotion.q; + return mTargetMotion.q; } template <typename T> inline void ClothImpl<T>::clearInertia() { - mCloth.mCurrentMotion = mCloth.mTargetMotion; - mCloth.mLinearVelocity = physx::PxVec3(0.0); - mCloth.mAngularVelocity = physx::PxVec3(0.0); + mCurrentMotion = mTargetMotion; + mLinearVelocity = physx::PxVec3(0.0); + mAngularVelocity = physx::PxVec3(0.0); - mCloth.wakeUp(); + wakeUp(); } // Fixed 4505:local function has been removed template <typename T> inline void ClothImpl<T>::teleport(const physx::PxVec3& delta) { - mCloth.mCurrentMotion.p += delta; - mCloth.mTargetMotion.p += delta; + mCurrentMotion.p += delta; + mTargetMotion.p += delta; } template <typename T> inline float ClothImpl<T>::getPreviousIterationDt() const { - return mCloth.mPrevIterDt; + return mPrevIterDt; } template <typename T> inline void ClothImpl<T>::setGravity(const physx::PxVec3& gravity) { physx::PxVec3 value = gravity; - if (value == mCloth.mGravity) + if (value == mGravity) return; - mCloth.mGravity = value; - mCloth.wakeUp(); + mGravity = value; + wakeUp(); } template <typename T> inline physx::PxVec3 ClothImpl<T>::getGravity() const { - return mCloth.mGravity; + return mGravity; } inline float safeLog2(float x) @@ -340,148 +338,148 @@ template <typename T> inline void ClothImpl<T>::setDamping(const physx::PxVec3& damping) { physx::PxVec3 value = safeLog2(physx::PxVec3(1.f) - damping); - if (value == mCloth.mLogDamping) + if (value == mLogDamping) return; - mCloth.mLogDamping = value; - mCloth.wakeUp(); + mLogDamping = value; + wakeUp(); } template <typename T> inline physx::PxVec3 ClothImpl<T>::getDamping() const { - return physx::PxVec3(1.f) - safeExp2(mCloth.mLogDamping); + return physx::PxVec3(1.f) - safeExp2(mLogDamping); } template <typename T> inline void ClothImpl<T>::setLinearDrag(const physx::PxVec3& drag) { physx::PxVec3 value = safeLog2(physx::PxVec3(1.f) - drag); - if (value == mCloth.mLinearLogDrag) + if (value == mLinearLogDrag) return; - mCloth.mLinearLogDrag = value; - mCloth.wakeUp(); + mLinearLogDrag = value; + wakeUp(); } template <typename T> inline physx::PxVec3 ClothImpl<T>::getLinearDrag() const { - return physx::PxVec3(1.f) - safeExp2(mCloth.mLinearLogDrag); + return physx::PxVec3(1.f) - safeExp2(mLinearLogDrag); } template <typename T> inline void ClothImpl<T>::setAngularDrag(const physx::PxVec3& drag) { physx::PxVec3 value = safeLog2(physx::PxVec3(1.f) - drag); - if (value == mCloth.mAngularLogDrag) + if (value == mAngularLogDrag) return; - mCloth.mAngularLogDrag = value; - mCloth.wakeUp(); + mAngularLogDrag = value; + wakeUp(); } template <typename T> inline physx::PxVec3 ClothImpl<T>::getAngularDrag() const { - return physx::PxVec3(1.f) - safeExp2(mCloth.mAngularLogDrag); + return physx::PxVec3(1.f) - safeExp2(mAngularLogDrag); } template <typename T> inline void ClothImpl<T>::setLinearInertia(const physx::PxVec3& inertia) { physx::PxVec3 value = inertia; - if (value == mCloth.mLinearInertia) + if (value == mLinearInertia) return; - mCloth.mLinearInertia = value; - mCloth.wakeUp(); + mLinearInertia = value; + wakeUp(); } template <typename T> inline physx::PxVec3 ClothImpl<T>::getLinearInertia() const { - return mCloth.mLinearInertia; + return mLinearInertia; } template <typename T> inline void ClothImpl<T>::setAngularInertia(const physx::PxVec3& inertia) { physx::PxVec3 value = inertia; - if (value == mCloth.mAngularInertia) + if (value == mAngularInertia) return; - mCloth.mAngularInertia = value; - mCloth.wakeUp(); + mAngularInertia = value; + wakeUp(); } template <typename T> inline physx::PxVec3 ClothImpl<T>::getAngularInertia() const { - return mCloth.mAngularInertia; + return mAngularInertia; } template <typename T> inline void ClothImpl<T>::setCentrifugalInertia(const physx::PxVec3& inertia) { physx::PxVec3 value = inertia; - if (value == mCloth.mCentrifugalInertia) + if (value == mCentrifugalInertia) return; - mCloth.mCentrifugalInertia = value; - mCloth.wakeUp(); + mCentrifugalInertia = value; + wakeUp(); } template <typename T> inline physx::PxVec3 ClothImpl<T>::getCentrifugalInertia() const { - return mCloth.mCentrifugalInertia; + return mCentrifugalInertia; } template <typename T> inline void ClothImpl<T>::setSolverFrequency(float frequency) { - if (frequency == mCloth.mSolverFrequency) + if (frequency == mSolverFrequency) return; - mCloth.mSolverFrequency = frequency; - mCloth.mClothCostDirty = true; - mCloth.mIterDtAvg.reset(); - mCloth.wakeUp(); + mSolverFrequency = frequency; + getChildCloth()->mClothCostDirty = true; + mIterDtAvg.reset(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getSolverFrequency() const { - return mCloth.mSolverFrequency; + return mSolverFrequency; } template <typename T> inline void ClothImpl<T>::setStiffnessFrequency(float frequency) { - if (frequency == mCloth.mStiffnessFrequency) + if (frequency == mStiffnessFrequency) return; - mCloth.mStiffnessFrequency = frequency; - mCloth.wakeUp(); + mStiffnessFrequency = frequency; + wakeUp(); } template <typename T> inline float ClothImpl<T>::getStiffnessFrequency() const { - return mCloth.mStiffnessFrequency; + return mStiffnessFrequency; } template <typename T> inline void ClothImpl<T>::setAcceleationFilterWidth(uint32_t n) { - mCloth.mIterDtAvg.resize(n); + mIterDtAvg.resize(n); } template <typename T> inline uint32_t ClothImpl<T>::getAccelerationFilterWidth() const { - return mCloth.mIterDtAvg.size(); + return mIterDtAvg.size(); } // move a subarray @@ -510,7 +508,7 @@ inline bool updateIndex(uint32_t& index, uint32_t first, int32_t delta) template <typename T> inline void ClothImpl<T>::setSpheres(Range<const physx::PxVec4> spheres, uint32_t first, uint32_t last) { - uint32_t oldSize = uint32_t(mCloth.mStartCollisionSpheres.size()); + uint32_t oldSize = uint32_t(getChildCloth()->mStartCollisionSpheres.size()); uint32_t newSize = uint32_t(spheres.size()) + oldSize - last + first; NV_CLOTH_ASSERT(newSize <= 32); @@ -527,22 +525,22 @@ inline void ClothImpl<T>::setSpheres(Range<const physx::PxVec4> spheres, uint32_ if (!oldSize) { - ContextLockType contextLock(mCloth.mFactory); - mCloth.mStartCollisionSpheres.assign(spheres.begin(), spheres.end()); - mCloth.notifyChanged(); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mStartCollisionSpheres.assign(spheres.begin(), spheres.end()); + getChildCloth()->notifyChanged(); } else { if (std::max(oldSize, newSize) > - std::min(mCloth.mStartCollisionSpheres.capacity(), mCloth.mTargetCollisionSpheres.capacity())) + std::min(getChildCloth()->mStartCollisionSpheres.capacity(), getChildCloth()->mTargetCollisionSpheres.capacity())) { - ContextLockType contextLock(mCloth.mFactory); - mCloth.mStartCollisionSpheres.reserve(newSize); - mCloth.mTargetCollisionSpheres.reserve(std::max(oldSize, newSize)); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mStartCollisionSpheres.reserve(newSize); + getChildCloth()->mTargetCollisionSpheres.reserve(std::max(oldSize, newSize)); } - typename T::MappedVec4fVectorType start = mCloth.mStartCollisionSpheres; - typename T::MappedVec4fVectorType target = mCloth.mTargetCollisionSpheres; + typename T::MappedVec4fVectorType start = getChildCloth()->mStartCollisionSpheres; + typename T::MappedVec4fVectorType target = getChildCloth()->mTargetCollisionSpheres; // fill target from start for (uint32_t i = uint32_t(target.size()); i < oldSize; ++i) @@ -563,7 +561,7 @@ inline void ClothImpl<T>::setSpheres(Range<const physx::PxVec4> spheres, uint32_ start[i] = spheres[i - first]; // adjust capsule indices - typename T::MappedIndexVectorType indices = mCloth.mCapsuleIndices; + typename T::MappedIndexVectorType indices = getChildCloth()->mCapsuleIndices; Vector<IndexPair>::Type::Iterator cIt, cEnd = indices.end(); for (cIt = indices.begin(); cIt != cEnd;) { @@ -582,7 +580,7 @@ inline void ClothImpl<T>::setSpheres(Range<const physx::PxVec4> spheres, uint32_ start.resize(newSize); target.resize(newSize); - mCloth.notifyChanged(); + getChildCloth()->notifyChanged(); } // fill target elements with spheres @@ -590,20 +588,20 @@ inline void ClothImpl<T>::setSpheres(Range<const physx::PxVec4> spheres, uint32_ target[first + i] = spheres[i]; } - mCloth.wakeUp(); + getChildCloth()->wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getNumSpheres() const { - return uint32_t(mCloth.mStartCollisionSpheres.size()); + return uint32_t(getChildCloth()->mStartCollisionSpheres.size()); } // Fixed 4505:local function has been removed template <typename T> inline void ClothImpl<T>::setCapsules(Range<const uint32_t> capsules, uint32_t first, uint32_t last) { - uint32_t oldSize = uint32_t(mCloth.mCapsuleIndices.size()); + uint32_t oldSize = uint32_t(getChildCloth()->mCapsuleIndices.size()); uint32_t newSize = uint32_t(capsules.size() / 2) + oldSize - last + first; NV_CLOTH_ASSERT(newSize <= 32); @@ -612,16 +610,16 @@ inline void ClothImpl<T>::setCapsules(Range<const uint32_t> capsules, uint32_t f const IndexPair* srcIndices = reinterpret_cast<const IndexPair*>(capsules.begin()); - if (mCloth.mCapsuleIndices.capacity() < newSize) + if (getChildCloth()->mCapsuleIndices.capacity() < newSize) { - ContextLockType contextLock(mCloth.mFactory); - mCloth.mCapsuleIndices.reserve(newSize); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mCapsuleIndices.reserve(newSize); } // resize to larger of oldSize and newSize - mCloth.mCapsuleIndices.resize(std::max(oldSize, newSize)); + getChildCloth()->mCapsuleIndices.resize(std::max(oldSize, newSize)); - typename T::MappedIndexVectorType dstIndices = mCloth.mCapsuleIndices; + typename T::MappedIndexVectorType dstIndices = getChildCloth()->mCapsuleIndices; if (uint32_t delta = newSize - oldSize) { @@ -633,26 +631,26 @@ inline void ClothImpl<T>::setCapsules(Range<const uint32_t> capsules, uint32_t f dstIndices[i] = srcIndices[i - first]; dstIndices.resize(newSize); - mCloth.notifyChanged(); + getChildCloth()->notifyChanged(); } // fill existing elements from capsules for (uint32_t i = first; i < last; ++i) dstIndices[i] = srcIndices[i - first]; - mCloth.wakeUp(); + getChildCloth()->wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getNumCapsules() const { - return uint32_t(mCloth.mCapsuleIndices.size()); + return uint32_t(getChildCloth()->mCapsuleIndices.size()); } template <typename T> inline void ClothImpl<T>::setPlanes(Range<const physx::PxVec4> planes, uint32_t first, uint32_t last) { - uint32_t oldSize = uint32_t(mCloth.mStartCollisionPlanes.size()); + uint32_t oldSize = uint32_t(getChildCloth()->mStartCollisionPlanes.size()); uint32_t newSize = uint32_t(planes.size()) + oldSize - last + first; NV_CLOTH_ASSERT(newSize <= 32); @@ -681,22 +679,22 @@ inline void ClothImpl<T>::setPlanes(Range<const physx::PxVec4> planes, uint32_t if (!oldSize) { - ContextLockType contextLock(mCloth.mFactory); - mCloth.mStartCollisionPlanes.assign(planes.begin(), planes.end()); - mCloth.notifyChanged(); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mStartCollisionPlanes.assign(planes.begin(), planes.end()); + getChildCloth()->notifyChanged(); } else { if (std::max(oldSize, newSize) > - std::min(mCloth.mStartCollisionPlanes.capacity(), mCloth.mTargetCollisionPlanes.capacity())) + std::min(getChildCloth()->mStartCollisionPlanes.capacity(), getChildCloth()->mTargetCollisionPlanes.capacity())) { - ContextLockType contextLock(mCloth.mFactory); - mCloth.mStartCollisionPlanes.reserve(newSize); - mCloth.mTargetCollisionPlanes.reserve(std::max(oldSize, newSize)); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mStartCollisionPlanes.reserve(newSize); + getChildCloth()->mTargetCollisionPlanes.reserve(std::max(oldSize, newSize)); } - typename T::MappedVec4fVectorType start = mCloth.mStartCollisionPlanes; - typename T::MappedVec4fVectorType target = mCloth.mTargetCollisionPlanes; + typename T::MappedVec4fVectorType start = getChildCloth()->mStartCollisionPlanes; + typename T::MappedVec4fVectorType target = getChildCloth()->mTargetCollisionPlanes; // fill target from start for (uint32_t i = target.size(); i < oldSize; ++i) @@ -718,7 +716,7 @@ inline void ClothImpl<T>::setPlanes(Range<const physx::PxVec4> planes, uint32_t // adjust convex indices uint32_t mask = (uint32_t(1) << (last + std::min(delta, 0))) - 1; - typename T::MappedMaskVectorType masks = mCloth.mConvexMasks; + typename T::MappedMaskVectorType masks = getChildCloth()->mConvexMasks; Vector<uint32_t>::Type::Iterator cIt, cEnd = masks.end(); for (cIt = masks.begin(); cIt != cEnd;) { @@ -739,7 +737,7 @@ inline void ClothImpl<T>::setPlanes(Range<const physx::PxVec4> planes, uint32_t start.resize(newSize); target.resize(newSize); - mCloth.notifyChanged(); + getChildCloth()->notifyChanged(); } // fill target elements with planes @@ -747,19 +745,19 @@ inline void ClothImpl<T>::setPlanes(Range<const physx::PxVec4> planes, uint32_t target[first + i] = planes[i]; } - mCloth.wakeUp(); + wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getNumPlanes() const { - return uint32_t(mCloth.mStartCollisionPlanes.size()); + return uint32_t(getChildCloth()->mStartCollisionPlanes.size()); } template <typename T> inline void ClothImpl<T>::setConvexes(Range<const uint32_t> convexMasks, uint32_t first, uint32_t last) { - uint32_t oldSize = uint32_t(mCloth.mConvexMasks.size()); + uint32_t oldSize = uint32_t(getChildCloth()->mConvexMasks.size()); uint32_t newSize = uint32_t(convexMasks.size()) + oldSize - last + first; NV_CLOTH_ASSERT(newSize <= 32); @@ -776,18 +774,18 @@ inline void ClothImpl<T>::setConvexes(Range<const uint32_t> convexMasks, uint32_ } #endif - if (mCloth.mConvexMasks.capacity() < newSize) + if (getChildCloth()->mConvexMasks.capacity() < newSize) { - ContextLockType contextLock(mCloth.mFactory); - mCloth.mConvexMasks.reserve(newSize); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mConvexMasks.reserve(newSize); } // resize to larger of oldSize and newSize - mCloth.mConvexMasks.resize(std::max(oldSize, newSize)); + getChildCloth()->mConvexMasks.resize(std::max(oldSize, newSize)); if (uint32_t delta = newSize - oldSize) { - typename T::MappedMaskVectorType masks = mCloth.mConvexMasks; + typename T::MappedMaskVectorType masks = getChildCloth()->mConvexMasks; // move past-range elements to new place move(masks.begin(), last, oldSize, last + delta); @@ -797,16 +795,16 @@ inline void ClothImpl<T>::setConvexes(Range<const uint32_t> convexMasks, uint32_ masks[i] = convexMasks[i - first]; masks.resize(newSize); - mCloth.notifyChanged(); + getChildCloth()->notifyChanged(); } - mCloth.wakeUp(); + wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getNumConvexes() const { - return uint32_t(mCloth.mConvexMasks.size()); + return uint32_t(getChildCloth()->mConvexMasks.size()); } template <typename T> @@ -816,10 +814,10 @@ inline void ClothImpl<T>::setTriangles(Range<const physx::PxVec3> triangles, uin first *= 3; last *= 3; - triangles = mCloth.clampTriangleCount(triangles, last - first); + triangles = getChildCloth()->clampTriangleCount(triangles, last - first); NV_CLOTH_ASSERT(0 == triangles.size() % 3); - uint32_t oldSize = uint32_t(mCloth.mStartCollisionTriangles.size()); + uint32_t oldSize = uint32_t(getChildCloth()->mStartCollisionTriangles.size()); uint32_t newSize = uint32_t(triangles.size()) + oldSize - last + first; NV_CLOTH_ASSERT(first <= oldSize); @@ -830,22 +828,22 @@ inline void ClothImpl<T>::setTriangles(Range<const physx::PxVec3> triangles, uin if (!oldSize) { - ContextLockType contextLock(mCloth.mFactory); - mCloth.mStartCollisionTriangles.assign(triangles.begin(), triangles.end()); - mCloth.notifyChanged(); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mStartCollisionTriangles.assign(triangles.begin(), triangles.end()); + getChildCloth()->notifyChanged(); } else { if (std::max(oldSize, newSize) > - std::min(mCloth.mStartCollisionTriangles.capacity(), mCloth.mTargetCollisionTriangles.capacity())) + std::min(getChildCloth()->mStartCollisionTriangles.capacity(), getChildCloth()->mTargetCollisionTriangles.capacity())) { - ContextLockType contextLock(mCloth.mFactory); - mCloth.mStartCollisionTriangles.reserve(newSize); - mCloth.mTargetCollisionTriangles.reserve(std::max(oldSize, newSize)); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mStartCollisionTriangles.reserve(newSize); + getChildCloth()->mTargetCollisionTriangles.reserve(std::max(oldSize, newSize)); } - typename T::MappedVec3fVectorType start = mCloth.mStartCollisionTriangles; - typename T::MappedVec3fVectorType target = mCloth.mTargetCollisionTriangles; + typename T::MappedVec3fVectorType start = getChildCloth()->mStartCollisionTriangles; + typename T::MappedVec3fVectorType target = getChildCloth()->mTargetCollisionTriangles; // fill target from start for (uint32_t i = target.size(); i < oldSize; ++i) @@ -861,59 +859,59 @@ inline void ClothImpl<T>::setTriangles(Range<const physx::PxVec3> triangles, uin move(start.begin(), last, oldSize, last + delta); move(target.begin(), last, oldSize, last + delta); - // fill new elements from planes + // fill new elements from triangles for (uint32_t i = last; i < last + delta; ++i) start[i] = triangles[i - first]; start.resize(newSize); target.resize(newSize); - mCloth.notifyChanged(); + getChildCloth()->notifyChanged(); } ////////////////////// // if (std::max(oldSize, newSize) > - // std::min(mCloth.mStartCollisionTriangles.capacity(), mCloth.mTargetCollisionTriangles.capacity())) + // std::min(getChildCloth()->mStartCollisionTriangles.capacity(), getChildCloth()->mTargetCollisionTriangles.capacity())) // { - // ContextLockType contextLock(mCloth.mFactory); - // mCloth.mStartCollisionTriangles.reserve(newSize); - // mCloth.mTargetCollisionTriangles.reserve(std::max(oldSize, newSize)); + // ContextLockType contextLock(getChildCloth()->mFactory); + // getChildCloth()->mStartCollisionTriangles.reserve(newSize); + // getChildCloth()->mTargetCollisionTriangles.reserve(std::max(oldSize, newSize)); // } // // // fill target from start - // for (uint32_t i = mCloth.mTargetCollisionTriangles.size(); i < oldSize; ++i) - // mCloth.mTargetCollisionTriangles.pushBack(mCloth.mStartCollisionTriangles[i]); + // for (uint32_t i = getChildCloth()->mTargetCollisionTriangles.size(); i < oldSize; ++i) + // getChildCloth()->mTargetCollisionTriangles.pushBack(getChildCloth()->mStartCollisionTriangles[i]); // // // resize to larger of oldSize and newSize - // mCloth.mStartCollisionTriangles.resize(std::max(oldSize, newSize)); - // mCloth.mTargetCollisionTriangles.resize(std::max(oldSize, newSize)); + // getChildCloth()->mStartCollisionTriangles.resize(std::max(oldSize, newSize)); + // getChildCloth()->mTargetCollisionTriangles.resize(std::max(oldSize, newSize)); // // if (uint32_t delta = newSize - oldSize) // { // // move past-range elements to new place - // move(mCloth.mStartCollisionTriangles.begin(), last, oldSize, last + delta); - // move(mCloth.mTargetCollisionTriangles.begin(), last, oldSize, last + delta); + // move(getChildCloth()->mStartCollisionTriangles.begin(), last, oldSize, last + delta); + // move(getChildCloth()->mTargetCollisionTriangles.begin(), last, oldSize, last + delta); // // // fill new elements from triangles // for (uint32_t i = last; i < last + delta; ++i) - // mCloth.mStartCollisionTriangles[i] = triangles[i - first]; + // getChildCloth()->mStartCollisionTriangles[i] = triangles[i - first]; // - // mCloth.mStartCollisionTriangles.resize(newSize); - // mCloth.mTargetCollisionTriangles.resize(newSize); + // getChildCloth()->mStartCollisionTriangles.resize(newSize); + // getChildCloth()->mTargetCollisionTriangles.resize(newSize); // - // mCloth.notifyChanged(); + // notifyChanged(); // } // fill target elements with triangles // for (uint32_t i = 0; i < triangles.size(); ++i) - // mCloth.mTargetCollisionTriangles[first + i] = triangles[i]; + // getChildCloth()->mTargetCollisionTriangles[first + i] = triangles[i]; - // fill target elements with planes + // fill target elements with triangles for (uint32_t i = 0; i < triangles.size(); ++i) target[first + i] = triangles[i]; } - mCloth.wakeUp(); + wakeUp(); } template <typename T> @@ -925,12 +923,12 @@ inline void ClothImpl<T>::setTriangles(Range<const physx::PxVec3> startTriangles // convert from triangle to vertex count first *= 3; - uint32_t last = uint32_t(mCloth.mStartCollisionTriangles.size()); + uint32_t last = uint32_t(getChildCloth()->mStartCollisionTriangles.size()); - startTriangles = mCloth.clampTriangleCount(startTriangles, last - first); - targetTriangles = mCloth.clampTriangleCount(targetTriangles, last - first); + startTriangles = getChildCloth()->clampTriangleCount(startTriangles, last - first); + targetTriangles = getChildCloth()->clampTriangleCount(targetTriangles, last - first); - uint32_t oldSize = uint32_t(mCloth.mStartCollisionTriangles.size()); + uint32_t oldSize = uint32_t(getChildCloth()->mStartCollisionTriangles.size()); uint32_t newSize = uint32_t(startTriangles.size()) + oldSize - last + first; NV_CLOTH_ASSERT(first <= oldSize); @@ -939,250 +937,240 @@ inline void ClothImpl<T>::setTriangles(Range<const physx::PxVec3> startTriangles if (!oldSize && !newSize) return; - if (newSize > std::min(mCloth.mStartCollisionTriangles.capacity(), mCloth.mTargetCollisionTriangles.capacity())) + if (newSize > std::min(getChildCloth()->mStartCollisionTriangles.capacity(), getChildCloth()->mTargetCollisionTriangles.capacity())) { - ContextLockType contextLock(mCloth.mFactory); - // mCloth.mStartCollisionTriangles.reserve(newSize); - // mCloth.mTargetCollisionTriangles.reserve(newSize); - - - mCloth.mStartCollisionTriangles.assign(startTriangles.begin(), startTriangles.end()); - mCloth.mTargetCollisionTriangles.assign(targetTriangles.begin(), targetTriangles.end()); - mCloth.notifyChanged(); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mStartCollisionTriangles.assign(startTriangles.begin(), startTriangles.end()); + getChildCloth()->mTargetCollisionTriangles.assign(targetTriangles.begin(), targetTriangles.end()); + getChildCloth()->notifyChanged(); } else { uint32_t retainSize = oldSize - last + first; - mCloth.mStartCollisionTriangles.resize(retainSize); - mCloth.mTargetCollisionTriangles.resize(retainSize); + getChildCloth()->mStartCollisionTriangles.resize(retainSize); + getChildCloth()->mTargetCollisionTriangles.resize(retainSize); - mCloth.mStartCollisionTriangles.assign(startTriangles.begin(), startTriangles.end()); - mCloth.mTargetCollisionTriangles.assign(targetTriangles.begin(), targetTriangles.end()); - - // for (uint32_t i = 0, n = startTriangles.size(); i < n; ++i) - // { - // mCloth.mStartCollisionTriangles.pushBack(startTriangles[i]); - // mCloth.mTargetCollisionTriangles.pushBack(targetTriangles[i]); - // } + getChildCloth()->mStartCollisionTriangles.assign(startTriangles.begin(), startTriangles.end()); + getChildCloth()->mTargetCollisionTriangles.assign(targetTriangles.begin(), targetTriangles.end()); if (newSize - oldSize) - mCloth.notifyChanged(); + getChildCloth()->notifyChanged(); } - mCloth.wakeUp(); + wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getNumTriangles() const { - return uint32_t(mCloth.mStartCollisionTriangles.size()) / 3; + return uint32_t(getChildCloth()->mStartCollisionTriangles.size()) / 3; } template <typename T> inline bool ClothImpl<T>::isContinuousCollisionEnabled() const { - return mCloth.mEnableContinuousCollision; + return getChildCloth()->mEnableContinuousCollision; } template <typename T> inline void ClothImpl<T>::enableContinuousCollision(bool enable) { - if (enable == mCloth.mEnableContinuousCollision) + if (enable == getChildCloth()->mEnableContinuousCollision) return; - mCloth.mEnableContinuousCollision = enable; - mCloth.notifyChanged(); - mCloth.wakeUp(); + getChildCloth()->mEnableContinuousCollision = enable; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getCollisionMassScale() const { - return mCloth.mCollisionMassScale; + return getChildCloth()->mCollisionMassScale; } template <typename T> inline void ClothImpl<T>::setCollisionMassScale(float scale) { - if (scale == mCloth.mCollisionMassScale) + if (scale == getChildCloth()->mCollisionMassScale) return; - mCloth.mCollisionMassScale = scale; - mCloth.notifyChanged(); - mCloth.wakeUp(); + getChildCloth()->mCollisionMassScale = scale; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline void ClothImpl<T>::setFriction(float friction) { - mCloth.mFriction = friction; - mCloth.wakeUp(); + getChildCloth()->mFriction = friction; + getChildCloth()->notifyChanged(); } template <typename T> inline float ClothImpl<T>::getFriction() const { - return mCloth.mFriction; + return getChildCloth()->mFriction; } template <typename T> inline uint32_t ClothImpl<T>::getNumVirtualParticleWeights() const { - return uint32_t(mCloth.mVirtualParticleWeights.size()); + return uint32_t(getChildCloth()->mVirtualParticleWeights.size()); } template <typename T> inline void ClothImpl<T>::setTetherConstraintScale(float scale) { - if (scale == mCloth.mTetherConstraintScale) + if (scale == getChildCloth()->mTetherConstraintScale) return; - mCloth.mTetherConstraintScale = scale; - mCloth.notifyChanged(); - mCloth.wakeUp(); + getChildCloth()->mTetherConstraintScale = scale; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getTetherConstraintScale() const { - return mCloth.mTetherConstraintScale; + return getChildCloth()->mTetherConstraintScale; } template <typename T> inline void ClothImpl<T>::setTetherConstraintStiffness(float stiffness) { float value = safeLog2(1 - stiffness); - if (value == mCloth.mTetherConstraintLogStiffness) + if (value == getChildCloth()->mTetherConstraintLogStiffness) return; - mCloth.mTetherConstraintLogStiffness = value; - mCloth.notifyChanged(); - mCloth.wakeUp(); + getChildCloth()->mTetherConstraintLogStiffness = value; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getTetherConstraintStiffness() const { - return 1.f - safeExp2(mCloth.mTetherConstraintLogStiffness); + return 1.f - safeExp2(getChildCloth()->mTetherConstraintLogStiffness); } template <typename T> inline Range<physx::PxVec4> ClothImpl<T>::getMotionConstraints() { - mCloth.wakeUp(); - return mCloth.push(mCloth.mMotionConstraints); + wakeUp(); + return getChildCloth()->push(getChildCloth()->mMotionConstraints); } template <typename T> inline void ClothImpl<T>::clearMotionConstraints() { - mCloth.clear(mCloth.mMotionConstraints); - mCloth.wakeUp(); + getChildCloth()->clear(getChildCloth()->mMotionConstraints); + wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getNumMotionConstraints() const { - return uint32_t(mCloth.mMotionConstraints.mStart.size()); + return uint32_t(getChildCloth()->mMotionConstraints.mStart.size()); } template <typename T> inline void ClothImpl<T>::setMotionConstraintScaleBias(float scale, float bias) { - if (scale == mCloth.mMotionConstraintScale && bias == mCloth.mMotionConstraintBias) + if (scale == getChildCloth()->mMotionConstraintScale && bias == getChildCloth()->mMotionConstraintBias) return; - mCloth.mMotionConstraintScale = scale; - mCloth.mMotionConstraintBias = bias; - mCloth.notifyChanged(); - mCloth.wakeUp(); + getChildCloth()->mMotionConstraintScale = scale; + getChildCloth()->mMotionConstraintBias = bias; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getMotionConstraintScale() const { - return mCloth.mMotionConstraintScale; + return getChildCloth()->mMotionConstraintScale; } template <typename T> inline float ClothImpl<T>::getMotionConstraintBias() const { - return mCloth.mMotionConstraintBias; + return getChildCloth()->mMotionConstraintBias; } template <typename T> inline void ClothImpl<T>::setMotionConstraintStiffness(float stiffness) { float value = safeLog2(1 - stiffness); - if (value == mCloth.mMotionConstraintLogStiffness) + if (value == getChildCloth()->mMotionConstraintLogStiffness) return; - mCloth.mMotionConstraintLogStiffness = value; - mCloth.notifyChanged(); - mCloth.wakeUp(); + getChildCloth()->mMotionConstraintLogStiffness = value; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getMotionConstraintStiffness() const { - return 1.f - safeExp2(mCloth.mMotionConstraintLogStiffness); + return 1.f - safeExp2(getChildCloth()->mMotionConstraintLogStiffness); } template <typename T> inline Range<physx::PxVec4> ClothImpl<T>::getSeparationConstraints() { - mCloth.wakeUp(); - return mCloth.push(mCloth.mSeparationConstraints); + wakeUp(); + return getChildCloth()->push(getChildCloth()->mSeparationConstraints); } template <typename T> inline void ClothImpl<T>::clearSeparationConstraints() { - mCloth.clear(mCloth.mSeparationConstraints); - mCloth.wakeUp(); + getChildCloth()->clear(getChildCloth()->mSeparationConstraints); + wakeUp(); } template <typename T> inline void ClothImpl<T>::clearInterpolation() { - if (!mCloth.mTargetCollisionSpheres.empty()) + if (!getChildCloth()->mTargetCollisionSpheres.empty()) { - ContextLockType contextLock(mCloth.mFactory); - physx::shdfnd::swap(mCloth.mStartCollisionSpheres, mCloth.mTargetCollisionSpheres); - mCloth.mTargetCollisionSpheres.resize(0); + ContextLockType contextLock(getChildCloth()->mFactory); + physx::shdfnd::swap(getChildCloth()->mStartCollisionSpheres, getChildCloth()->mTargetCollisionSpheres); + getChildCloth()->mTargetCollisionSpheres.resize(0); } - mCloth.mMotionConstraints.pop(); - mCloth.mSeparationConstraints.pop(); - mCloth.wakeUp(); + getChildCloth()->mMotionConstraints.pop(); + getChildCloth()->mSeparationConstraints.pop(); + wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getNumSeparationConstraints() const { - return uint32_t(mCloth.mSeparationConstraints.mStart.size()); + return uint32_t(getChildCloth()->mSeparationConstraints.mStart.size()); } template <typename T> inline uint32_t ClothImpl<T>::getNumParticleAccelerations() const { - return uint32_t(mCloth.mParticleAccelerations.size()); + return uint32_t(getChildCloth()->mParticleAccelerations.size()); } template <typename T> inline void ClothImpl<T>::setWindVelocity(physx::PxVec3 wind) { - if (wind == mCloth.mWind) + if (wind == mWind) return; - mCloth.mWind = wind; - mCloth.notifyChanged(); - mCloth.wakeUp(); + mWind = wind; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline physx::PxVec3 ClothImpl<T>::getWindVelocity() const { - return mCloth.mWind; + return mWind; } template <typename T> @@ -1191,18 +1179,18 @@ inline void ClothImpl<T>::setDragCoefficient(float coefficient) NV_CLOTH_ASSERT(coefficient < 1.f); float value = safeLog2(1.f - coefficient); - if (value == mCloth.mDragLogCoefficient) + if (value == mDragLogCoefficient) return; - mCloth.mDragLogCoefficient = value; - mCloth.notifyChanged(); - mCloth.wakeUp(); + mDragLogCoefficient = value; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getDragCoefficient() const { - return 1.f - safeExp2(mCloth.mDragLogCoefficient); + return 1.f - safeExp2(mDragLogCoefficient); } template <typename T> @@ -1211,24 +1199,24 @@ inline void ClothImpl<T>::setLiftCoefficient(float coefficient) NV_CLOTH_ASSERT(coefficient < 1.f); float value = safeLog2(1.f - coefficient); - if (value == mCloth.mLiftLogCoefficient) + if (value == mLiftLogCoefficient) return; - mCloth.mLiftLogCoefficient = value; - mCloth.notifyChanged(); - mCloth.wakeUp(); + mLiftLogCoefficient = value; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getLiftCoefficient() const { - return 1.f - safeExp2(mCloth.mLiftLogCoefficient); + return 1.f - safeExp2(mLiftLogCoefficient); } template <typename T> inline uint32_t ClothImpl<T>::getNumSelfCollisionIndices() const { - return uint32_t(mCloth.mSelfCollisionIndices.size()); + return uint32_t(getChildCloth()->mSelfCollisionIndices.size()); } // Fixed 4505:local function has been removed @@ -1236,149 +1224,155 @@ template <typename T> inline void ClothImpl<T>::setRestPositions(Range<const physx::PxVec4> restPositions) { NV_CLOTH_ASSERT(restPositions.empty() || restPositions.size() == getNumParticles()); - ContextLockType contextLock(mCloth.mFactory); - mCloth.mRestPositions.assign(restPositions.begin(), restPositions.end()); - mCloth.wakeUp(); + ContextLockType contextLock(getChildCloth()->mFactory); + getChildCloth()->mRestPositions.assign(restPositions.begin(), restPositions.end()); + wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getNumRestPositions() const { - return uint32_t(mCloth.mRestPositions.size()); + return uint32_t(getChildCloth()->mRestPositions.size()); } template <typename T> inline void ClothImpl<T>::setSelfCollisionDistance(float distance) { - if (distance == mCloth.mSelfCollisionDistance) + if (distance == getChildCloth()->mSelfCollisionDistance) return; - mCloth.mSelfCollisionDistance = distance; - mCloth.notifyChanged(); - mCloth.wakeUp(); + getChildCloth()->mSelfCollisionDistance = distance; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getSelfCollisionDistance() const { - return mCloth.mSelfCollisionDistance; + return getChildCloth()->mSelfCollisionDistance; } template <typename T> inline void ClothImpl<T>::setSelfCollisionStiffness(float stiffness) { float value = safeLog2(1 - stiffness); - if (value == mCloth.mSelfCollisionLogStiffness) + if (value == getChildCloth()->mSelfCollisionLogStiffness) return; - mCloth.mSelfCollisionLogStiffness = value; - mCloth.notifyChanged(); - mCloth.wakeUp(); + getChildCloth()->mSelfCollisionLogStiffness = value; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getSelfCollisionStiffness() const { - return 1.f - safeExp2(mCloth.mSelfCollisionLogStiffness); + return 1.f - safeExp2(getChildCloth()->mSelfCollisionLogStiffness); } template <typename T> inline const physx::PxVec3& ClothImpl<T>::getBoundingBoxCenter() const { - return mCloth.mParticleBoundsCenter; + return getChildCloth()->mParticleBoundsCenter; } template <typename T> inline const physx::PxVec3& ClothImpl<T>::getBoundingBoxScale() const { - return mCloth.mParticleBoundsHalfExtent; + return getChildCloth()->mParticleBoundsHalfExtent; } template <typename T> inline void ClothImpl<T>::setSleepThreshold(float threshold) { - if (threshold == mCloth.mSleepThreshold) + if (threshold == mSleepThreshold) return; - mCloth.mSleepThreshold = threshold; - mCloth.notifyChanged(); - mCloth.wakeUp(); + mSleepThreshold = threshold; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline float ClothImpl<T>::getSleepThreshold() const { - return mCloth.mSleepThreshold; + return mSleepThreshold; } template <typename T> inline void ClothImpl<T>::setSleepTestInterval(uint32_t interval) { - if (interval == mCloth.mSleepTestInterval) + if (interval == mSleepTestInterval) return; - mCloth.mSleepTestInterval = interval; - mCloth.notifyChanged(); - mCloth.wakeUp(); + mSleepTestInterval = interval; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getSleepTestInterval() const { - return mCloth.mSleepTestInterval; + return mSleepTestInterval; } template <typename T> inline void ClothImpl<T>::setSleepAfterCount(uint32_t afterCount) { - if (afterCount == mCloth.mSleepAfterCount) + if (afterCount == mSleepAfterCount) return; - mCloth.mSleepAfterCount = afterCount; - mCloth.notifyChanged(); - mCloth.wakeUp(); + mSleepAfterCount = afterCount; + getChildCloth()->notifyChanged(); + wakeUp(); } template <typename T> inline uint32_t ClothImpl<T>::getSleepAfterCount() const { - return mCloth.mSleepAfterCount; + return mSleepAfterCount; } template <typename T> inline uint32_t ClothImpl<T>::getSleepPassCount() const { - return mCloth.mSleepPassCounter; + return mSleepPassCounter; } template <typename T> inline bool ClothImpl<T>::isAsleep() const { - return mCloth.isSleeping(); + return isSleeping(); } template <typename T> inline void ClothImpl<T>::putToSleep() { - mCloth.mSleepPassCounter = mCloth.mSleepAfterCount; + mSleepPassCounter = mSleepAfterCount; +} + +template <typename T> +inline bool ClothImpl<T>::isSleeping() const +{ + return mSleepPassCounter >= mSleepAfterCount; } template <typename T> inline void ClothImpl<T>::wakeUp() { - mCloth.wakeUp(); + mSleepPassCounter = 0; } template <typename T> inline void ClothImpl<T>::setUserData(void* data) { - mCloth.mUserData = data; + getChildCloth()->mUserData = data; } template <typename T> inline void* ClothImpl<T>::getUserData() const { - return mCloth.mUserData; + return getChildCloth()->mUserData; } template <typename T> diff --git a/NvCloth/src/NvSimd/NvSimd4f.h b/NvCloth/src/NvSimd/NvSimd4f.h index cb863e7..7e2dde6 100644 --- a/NvCloth/src/NvSimd/NvSimd4f.h +++ b/NvCloth/src/NvSimd/NvSimd4f.h @@ -76,12 +76,18 @@ struct Simd4fTupleFactory Simd4fTupleFactory(float x, float y, float z, float w) // c++11: : tuple{ x, y, z, w } { - tuple[0] = x, tuple[1] = y, tuple[2] = z, tuple[3] = w; + tuple[0] = x; + tuple[1] = y; + tuple[2] = z; + tuple[3] = w; } Simd4fTupleFactory(unsigned x, unsigned y, unsigned z, unsigned w) { unsigned* ptr = reinterpret_cast<unsigned*>(tuple); - ptr[0] = x, ptr[1] = y, ptr[2] = z, ptr[3] = w; + ptr[0] = x; + ptr[1] = y; + ptr[2] = z; + ptr[3] = w; } Simd4fTupleFactory& operator = (const Simd4fTupleFactory&); // not implemented inline operator Simd4f() const; diff --git a/NvCloth/src/NvSimd/NvSimd4i.h b/NvCloth/src/NvSimd/NvSimd4i.h index 3da6169..7eda3f4 100644 --- a/NvCloth/src/NvSimd/NvSimd4i.h +++ b/NvCloth/src/NvSimd/NvSimd4i.h @@ -61,7 +61,10 @@ struct Simd4iTupleFactory Simd4iTupleFactory(int x, int y, int z, int w) // c++11: : tuple{ x, y, z, w } { - tuple[0] = x, tuple[1] = y, tuple[2] = z, tuple[3] = w; + tuple[0] = x; + tuple[1] = y; + tuple[2] = z; + tuple[3] = w; } Simd4iTupleFactory& operator = (const Simd4iTupleFactory&); // not implemented inline operator Simd4i() const; diff --git a/NvCloth/src/NvSimd/NvSimdTypes.h b/NvCloth/src/NvSimd/NvSimdTypes.h index 57b4c36..0625332 100644 --- a/NvCloth/src/NvSimd/NvSimdTypes.h +++ b/NvCloth/src/NvSimd/NvSimdTypes.h @@ -72,8 +72,16 @@ void foo(const float* ptr) * Define Simd4f and Simd4i, which map to four 32bit float or integer tuples. * */ // note: ps4 compiler defines _M_X64 without value -#define NV_SIMD_SSE2 (defined _M_IX86 || defined _M_X64 || defined __i386__ || defined __x86_64__) -#define NV_SIMD_NEON (defined _M_ARM || defined __ARM_NEON__) +#if defined (_M_IX86) || defined (_M_X64) || defined (__i386__) || defined (__x86_64__) || PX_EMSCRIPTEN +#define NV_SIMD_SSE2 1 +#else +#define NV_SIMD_SSE2 0 +#endif +#if defined (_M_ARM) || defined (__ARM_NEON__) || defined (__ARM_NEON) +#define NV_SIMD_NEON 1 +#else +#define NV_SIMD_NEON 0 +#endif #define NV_SIMD_SIMD (NV_SIMD_SSE2 || NV_SIMD_NEON) /*! \def NV_SIMD_SCALAR @@ -90,7 +98,11 @@ void foo(const float* ptr) // support shift by vector operarations #define NV_SIMD_SHIFT_BY_VECTOR (NV_SIMD_NEON) // support inline assembler -#define NV_SIMD_INLINE_ASSEMBLER !(defined _M_ARM || defined SN_TARGET_PSP2 || defined __arm64__) +#if defined _M_ARM || defined SN_TARGET_PSP2 || defined __arm64__ || defined __aarch64__ +#define NV_SIMD_INLINE_ASSEMBLER 0 +#else +#define NV_SIMD_INLINE_ASSEMBLER 1 +#endif /*! \def NV_SIMD_USE_NAMESPACE * \brief Set to 1 to define the SIMD library types and functions inside the nvidia::simd namespace. diff --git a/NvCloth/src/SwCloth.cpp b/NvCloth/src/SwCloth.cpp index f409ad6..6077ada 100644 --- a/NvCloth/src/SwCloth.cpp +++ b/NvCloth/src/SwCloth.cpp @@ -174,116 +174,101 @@ namespace nv namespace cloth { -template <> -Cloth* ClothImpl<SwCloth>::clone(Factory& factory) const +Cloth* SwCloth::clone(Factory& factory) const { return factory.clone(*this); } -template <> -uint32_t ClothImpl<SwCloth>::getNumParticles() const +uint32_t SwCloth::getNumParticles() const { - return uint32_t(mCloth.mCurParticles.size()); + return uint32_t(mCurParticles.size()); } -template <> -void ClothImpl<SwCloth>::lockParticles() const +void SwCloth::lockParticles() const { } -template <> -void ClothImpl<SwCloth>::unlockParticles() const +void SwCloth::unlockParticles() const { } -template <> -MappedRange<PxVec4> ClothImpl<SwCloth>::getCurrentParticles() +MappedRange<physx::PxVec4> SwCloth::getCurrentParticles() { - return getMappedParticles(&mCloth.mCurParticles.front()); + return getMappedParticles(&mCurParticles.front()); } -template <> -MappedRange<const PxVec4> ClothImpl<SwCloth>::getCurrentParticles() const +MappedRange<const physx::PxVec4> SwCloth::getCurrentParticles() const { - return getMappedParticles(&mCloth.mCurParticles.front()); + return getMappedParticles(&mCurParticles.front()); } -template <> -MappedRange<PxVec4> ClothImpl<SwCloth>::getPreviousParticles() +MappedRange<physx::PxVec4> SwCloth::getPreviousParticles() { - return getMappedParticles(&mCloth.mPrevParticles.front()); + return getMappedParticles(&mPrevParticles.front()); } -template <> -MappedRange<const PxVec4> ClothImpl<SwCloth>::getPreviousParticles() const +MappedRange<const physx::PxVec4> SwCloth::getPreviousParticles() const { - return getMappedParticles(&mCloth.mPrevParticles.front()); + return getMappedParticles(&mPrevParticles.front()); } -template <> -GpuParticles ClothImpl<SwCloth>::getGpuParticles() +GpuParticles SwCloth::getGpuParticles() { GpuParticles result = { 0, 0, 0 }; return result; } -template <> -void ClothImpl<SwCloth>::setPhaseConfig(Range<const PhaseConfig> configs) +void SwCloth::setPhaseConfig(Range<const PhaseConfig> configs) { - mCloth.mPhaseConfigs.resize(0); + mPhaseConfigs.resize(0); // transform phase config to use in solver for (; !configs.empty(); configs.popFront()) if (configs.front().mStiffness > 0.0f) - mCloth.mPhaseConfigs.pushBack(transform(configs.front())); + mPhaseConfigs.pushBack(transform(configs.front())); - mCloth.wakeUp(); + wakeUp(); } -template <> -void ClothImpl<SwCloth>::setSelfCollisionIndices(Range<const uint32_t> indices) +void SwCloth::setSelfCollisionIndices(Range<const uint32_t> indices) { - ContextLockType lock(mCloth.mFactory); - mCloth.mSelfCollisionIndices.assign(indices.begin(), indices.end()); - mCloth.notifyChanged(); - mCloth.wakeUp(); + ContextLockType lock(mFactory); + mSelfCollisionIndices.assign(indices.begin(), indices.end()); + notifyChanged(); + wakeUp(); } -template <> -uint32_t ClothImpl<SwCloth>::getNumVirtualParticles() const +uint32_t SwCloth::getNumVirtualParticles() const { - return uint32_t(mCloth.mNumVirtualParticles); + return uint32_t(mNumVirtualParticles); } -template <> -Range<PxVec4> ClothImpl<SwCloth>::getParticleAccelerations() +Range<PxVec4> SwCloth::getParticleAccelerations() { - if (mCloth.mParticleAccelerations.empty()) + if (mParticleAccelerations.empty()) { - uint32_t n = uint32_t(mCloth.mCurParticles.size()); - mCloth.mParticleAccelerations.resize(n, PxVec4(0.0f)); + uint32_t n = uint32_t(mCurParticles.size()); + mParticleAccelerations.resize(n, PxVec4(0.0f)); } - mCloth.wakeUp(); + wakeUp(); - PxVec4* data = &mCloth.mParticleAccelerations.front(); - return Range<PxVec4>(data, data + mCloth.mParticleAccelerations.size()); + PxVec4* data = &mParticleAccelerations.front(); + return Range<PxVec4>(data, data + mParticleAccelerations.size()); } -template <> -void ClothImpl<SwCloth>::clearParticleAccelerations() +void SwCloth::clearParticleAccelerations() { - Vector<PxVec4>::Type().swap(mCloth.mParticleAccelerations); - mCloth.wakeUp(); + Vector<PxVec4>::Type().swap(mParticleAccelerations); + wakeUp(); } -template <> -void ClothImpl<SwCloth>::setVirtualParticles(Range<const uint32_t[4]> indices, Range<const PxVec3> weights) +void SwCloth::setVirtualParticles(Range<const uint32_t[4]> indices, Range<const PxVec3> weights) { - mCloth.mNumVirtualParticles = 0; + mNumVirtualParticles = 0; // shuffle indices to form independent SIMD sets - uint16_t numParticles = uint16_t(mCloth.mCurParticles.size()); + uint16_t numParticles = uint16_t(mCurParticles.size()); TripletScheduler scheduler(indices); scheduler.simd(numParticles, 4); @@ -292,29 +277,29 @@ void ClothImpl<SwCloth>::setVirtualParticles(Range<const uint32_t[4]> indices, R Vector<uint32_t>::Type::ConstIterator sIt = scheduler.mSetSizes.begin(); Vector<uint32_t>::Type::ConstIterator sEnd = scheduler.mSetSizes.end(); TripletScheduler::ConstTripletIter tIt = scheduler.mTriplets.begin(), tLast; - mCloth.mVirtualParticleIndices.resize(0); - mCloth.mVirtualParticleIndices.reserve(indices.size() + 3 * uint32_t(sEnd - sIt)); + mVirtualParticleIndices.resize(0); + mVirtualParticleIndices.reserve(indices.size() + 3 * uint32_t(sEnd - sIt)); for (; sIt != sEnd; ++sIt) { uint32_t setSize = *sIt; - for (tLast = tIt + setSize; tIt != tLast; ++tIt, ++mCloth.mNumVirtualParticles) - mCloth.mVirtualParticleIndices.pushBack(Vec4us(*tIt)); - mCloth.mVirtualParticleIndices.resize((mCloth.mVirtualParticleIndices.size() + 3) & ~3, dummy); + for (tLast = tIt + setSize; tIt != tLast; ++tIt, ++mNumVirtualParticles) + mVirtualParticleIndices.pushBack(Vec4us(*tIt)); + mVirtualParticleIndices.resize((mVirtualParticleIndices.size() + 3) & ~3, dummy); } - Vector<Vec4us>::Type(mCloth.mVirtualParticleIndices.begin(), mCloth.mVirtualParticleIndices.end()) - .swap(mCloth.mVirtualParticleIndices); + Vector<Vec4us>::Type(mVirtualParticleIndices.begin(), mVirtualParticleIndices.end()) + .swap(mVirtualParticleIndices); // precompute 1/dot(w,w) - Vector<PxVec4>::Type().swap(mCloth.mVirtualParticleWeights); - mCloth.mVirtualParticleWeights.reserve(weights.size()); + Vector<PxVec4>::Type().swap(mVirtualParticleWeights); + mVirtualParticleWeights.reserve(weights.size()); for (; !weights.empty(); weights.popFront()) { PxVec3 w = weights.front(); float scale = 1 / w.magnitudeSquared(); - mCloth.mVirtualParticleWeights.pushBack(PxVec4( w.x, w.y, w.z, scale )); + mVirtualParticleWeights.pushBack(PxVec4( w.x, w.y, w.z, scale )); } - mCloth.notifyChanged(); + notifyChanged(); } } // namespace cloth diff --git a/NvCloth/src/SwCloth.h b/NvCloth/src/SwCloth.h index 2730d9d..919a39a 100644 --- a/NvCloth/src/SwCloth.h +++ b/NvCloth/src/SwCloth.h @@ -37,6 +37,9 @@ #include <foundation/PxVec4.h> #include <foundation/PxVec3.h> #include <foundation/PxTransform.h> +#include "SwFactory.h" +#include "SwFabric.h" +#include "ClothImpl.h" namespace nv { @@ -44,9 +47,6 @@ namespace nv namespace cloth { -class SwFabric; -class SwFactory; - struct SwConstraints { void pop() @@ -62,15 +62,27 @@ struct SwConstraints Vector<physx::PxVec4>::Type mTarget; }; -class SwCloth +struct SwContextLock { - SwCloth& operator = (const SwCloth&); // not implemented - struct SwContextLock + SwContextLock(const SwFactory&) { - SwContextLock(const SwFactory&) - { - } - }; + } +}; + +class SwCloth; + +template<> +class ClothTraits<SwCloth> +{ +public: + typedef SwFactory FactoryType; + typedef SwFabric FabricType; + typedef SwContextLock ContextLockType; +}; + +class SwCloth : public ClothImpl<SwCloth> +{ + SwCloth& operator = (const SwCloth&); // not implemented public: typedef SwFactory FactoryType; @@ -87,14 +99,24 @@ class SwCloth ~SwCloth(); // not virtual on purpose public: - bool isSleeping() const - { - return mSleepPassCounter >= mSleepAfterCount; - } - void wakeUp() - { - mSleepPassCounter = 0; - } + virtual Cloth* clone(Factory& factory) const; + uint32_t getNumParticles() const; + + void lockParticles() const; + void unlockParticles() const; + + MappedRange<physx::PxVec4> getCurrentParticles(); + MappedRange<const physx::PxVec4> getCurrentParticles() const; + MappedRange<physx::PxVec4> getPreviousParticles(); + MappedRange<const physx::PxVec4> getPreviousParticles() const; + GpuParticles getGpuParticles(); + + void setPhaseConfig(Range<const PhaseConfig> configs); + void setSelfCollisionIndices(Range<const uint32_t> indices); + uint32_t getNumVirtualParticles() const; + Range<physx::PxVec4> getParticleAccelerations(); + void clearParticleAccelerations(); + void setVirtualParticles(Range<const uint32_t[4]> indices, Range<const physx::PxVec3> weights); void notifyChanged() { @@ -117,27 +139,6 @@ class SwCloth Vector<physx::PxVec4>::Type mCurParticles; Vector<physx::PxVec4>::Type mPrevParticles; - physx::PxVec3 mParticleBoundsCenter; - physx::PxVec3 mParticleBoundsHalfExtent; - - physx::PxVec3 mGravity; - physx::PxVec3 mLogDamping; - physx::PxVec3 mLinearLogDrag; - physx::PxVec3 mAngularLogDrag; - physx::PxVec3 mLinearInertia; - physx::PxVec3 mAngularInertia; - physx::PxVec3 mCentrifugalInertia; - float mSolverFrequency; - float mStiffnessFrequency; - - physx::PxTransform mTargetMotion; - physx::PxTransform mCurrentMotion; - physx::PxVec3 mLinearVelocity; - physx::PxVec3 mAngularVelocity; - - float mPrevIterDt; - MovingAverage mIterDtAvg; - Vector<PhaseConfig>::Type mPhaseConfigs; // transformed! // tether constraints stuff @@ -156,11 +157,6 @@ class SwCloth // particle acceleration stuff Vector<physx::PxVec4>::Type mParticleAccelerations; - // wind - physx::PxVec3 mWind; - float mDragLogCoefficient; - float mLiftLogCoefficient; - // collision stuff Vector<IndexPair>::Type mCapsuleIndices; Vector<physx::PxVec4>::Type mStartCollisionSpheres; @@ -187,16 +183,8 @@ class SwCloth Vector<physx::PxVec4>::Type mRestPositions; - // sleeping - uint32_t mSleepTestInterval; // how often to test for movement - uint32_t mSleepAfterCount; // number of tests to pass before sleep - float mSleepThreshold; // max movement delta to pass test - uint32_t mSleepPassCounter; // how many tests passed - uint32_t mSleepTestCounter; // how many iterations since tested - // unused for CPU simulation void* mUserData; - }; } // namespace cloth diff --git a/NvCloth/src/SwCollision.cpp b/NvCloth/src/SwCollision.cpp index 3774795..89df8a5 100644 --- a/NvCloth/src/SwCollision.cpp +++ b/NvCloth/src/SwCollision.cpp @@ -42,8 +42,8 @@ using namespace nv; using namespace physx; // the particle trajectory needs to penetrate more than 0.2 * radius to trigger continuous collision -template <typename Simd4f> -const Simd4f cloth::SwCollision<Simd4f>::sSkeletonWidth = simd4f(cloth::sqr(1 - 0.2f) - 1); +template <typename T4f> +const T4f cloth::SwCollision<T4f>::sSkeletonWidth = simd4f(cloth::sqr(1 - 0.2f) - 1); #if NV_SIMD_SSE2 const Simd4i cloth::Gather<Simd4i>::sIntSignBit = simd4i(0x80000000); @@ -66,8 +66,8 @@ const Simd4fScalarFactory sGridExpand = simd4f(1e-4f); const Simd4fTupleFactory sMinusFloatMaxXYZ = simd4f(-FLT_MAX, -FLT_MAX, -FLT_MAX, 0.0f); #if PX_PROFILE || PX_DEBUG -template <typename Simd4f> -uint32_t horizontalSum(const Simd4f& x) +template <typename T4f> +uint32_t horizontalSum(const T4f& x) { const float* p = array(x); return uint32_t(0.5f + p[0] + p[1] + p[2] + p[3]); @@ -75,8 +75,8 @@ uint32_t horizontalSum(const Simd4f& x) #endif // 7 elements are written to ptr! -template <typename Simd4f> -void storeBounds(float* ptr, const cloth::BoundingBox<Simd4f>& bounds) +template <typename T4f> +void storeBounds(float* ptr, const cloth::BoundingBox<T4f>& bounds) { store(ptr, bounds.mLower); store(ptr + 3, bounds.mUpper); @@ -128,14 +128,14 @@ namespace nv { namespace cloth { -template <typename Simd4f> -BoundingBox<Simd4f> expandBounds(const BoundingBox<Simd4f>& bbox, const SphereData* sIt, const SphereData* sEnd) +template <typename T4f> +BoundingBox<T4f> expandBounds(const BoundingBox<T4f>& bbox, const SphereData* sIt, const SphereData* sEnd) { - BoundingBox<Simd4f> result = bbox; + BoundingBox<T4f> result = bbox; for (; sIt != sEnd; ++sIt) { - Simd4f p = loadAligned(array(sIt->center)); - Simd4f r = splat<3>(p); + T4f p = loadAligned(array(sIt->center)); + T4f r = splat<3>(p); result.mLower = min(result.mLower, p - r); result.mUpper = max(result.mUpper, p + r); } @@ -146,8 +146,8 @@ BoundingBox<Simd4f> expandBounds(const BoundingBox<Simd4f>& bbox, const SphereDa namespace { -template <typename Simd4f, typename SrcIterator> -void generateSpheres(Simd4f* dIt, const SrcIterator& src, uint32_t count) +template <typename T4f, typename SrcIterator> +void generateSpheres(T4f* dIt, const SrcIterator& src, uint32_t count) { // have to copy out iterator to ensure alignment is maintained for (SrcIterator sIt = src; 0 < count--; ++sIt, ++dIt) @@ -192,41 +192,41 @@ void generateCones(cloth::ConeData* dst, const cloth::SphereData* sourceSpheres, } } -template <typename Simd4f, typename SrcIterator> -void generatePlanes(Simd4f* dIt, const SrcIterator& src, uint32_t count) +template <typename T4f, typename SrcIterator> +void generatePlanes(T4f* dIt, const SrcIterator& src, uint32_t count) { // have to copy out iterator to ensure alignment is maintained for (SrcIterator sIt = src; 0 < count--; ++sIt, ++dIt) *dIt = *sIt; } -template <typename Simd4f, typename SrcIterator> +template <typename T4f, typename SrcIterator> void generateTriangles(cloth::TriangleData* dIt, const SrcIterator& src, uint32_t count) { // have to copy out iterator to ensure alignment is maintained for (SrcIterator sIt = src; 0 < count--; ++dIt) { - Simd4f p0 = *sIt; + T4f p0 = *sIt; ++sIt; - Simd4f p1 = *sIt; + T4f p1 = *sIt; ++sIt; - Simd4f p2 = *sIt; + T4f p2 = *sIt; ++sIt; - Simd4f edge0 = p1 - p0; - Simd4f edge1 = p2 - p0; - Simd4f normal = cross3(edge0, edge1); + T4f edge0 = p1 - p0; + T4f edge1 = p2 - p0; + T4f normal = cross3(edge0, edge1); - Simd4f edge0SqrLength = dot3(edge0, edge0); - Simd4f edge1SqrLength = dot3(edge1, edge1); - Simd4f edge0DotEdge1 = dot3(edge0, edge1); - Simd4f normalInvLength = rsqrt(dot3(normal, normal)); + T4f edge0SqrLength = dot3(edge0, edge0); + T4f edge1SqrLength = dot3(edge1, edge1); + T4f edge0DotEdge1 = dot3(edge0, edge1); + T4f normalInvLength = rsqrt(dot3(normal, normal)); - Simd4f det = edge0SqrLength * edge1SqrLength - edge0DotEdge1 * edge0DotEdge1; - Simd4f denom = edge0SqrLength + edge1SqrLength - edge0DotEdge1 - edge0DotEdge1; + T4f det = edge0SqrLength * edge1SqrLength - edge0DotEdge1 * edge0DotEdge1; + T4f denom = edge0SqrLength + edge1SqrLength - edge0DotEdge1 - edge0DotEdge1; // there are definitely faster ways... - Simd4f aux = select(sMaskX, det, denom); + T4f aux = select(sMaskX, det, denom); aux = select(sMaskZ, edge0SqrLength, aux); aux = select(sMaskW, edge1SqrLength, aux); @@ -240,14 +240,14 @@ void generateTriangles(cloth::TriangleData* dIt, const SrcIterator& src, uint32_ } // namespace -template <typename Simd4f> -cloth::SwCollision<Simd4f>::CollisionData::CollisionData() +template <typename T4f> +cloth::SwCollision<T4f>::CollisionData::CollisionData() : mSpheres(0), mCones(0) { } -template <typename Simd4f> -cloth::SwCollision<Simd4f>::SwCollision(SwClothData& clothData, SwKernelAllocator& alloc) +template <typename T4f> +cloth::SwCollision<T4f>::SwCollision(SwClothData& clothData, SwKernelAllocator& alloc) : mClothData(clothData), mAllocator(alloc) { allocate(mCurData); @@ -256,22 +256,22 @@ cloth::SwCollision<Simd4f>::SwCollision(SwClothData& clothData, SwKernelAllocato { allocate(mPrevData); - generateSpheres(reinterpret_cast<Simd4f*>(mPrevData.mSpheres), - reinterpret_cast<const Simd4f*>(clothData.mStartCollisionSpheres), clothData.mNumSpheres); + generateSpheres(reinterpret_cast<T4f*>(mPrevData.mSpheres), + reinterpret_cast<const T4f*>(clothData.mStartCollisionSpheres), clothData.mNumSpheres); generateCones(mPrevData.mCones, mPrevData.mSpheres, clothData.mCapsuleIndices, clothData.mNumCapsules); } } -template <typename Simd4f> -cloth::SwCollision<Simd4f>::~SwCollision() +template <typename T4f> +cloth::SwCollision<T4f>::~SwCollision() { deallocate(mCurData); deallocate(mPrevData); } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::operator()(const IterationState<Simd4f>& state) +template <typename T4f> +void cloth::SwCollision<T4f>::operator()(const IterationState<T4f>& state) { mNumCollisions = 0; @@ -285,20 +285,20 @@ void cloth::SwCollision<Simd4f>::operator()(const IterationState<Simd4f>& state) bool lastIteration = state.mRemainingIterations == 1; - const Simd4f* targetSpheres = reinterpret_cast<const Simd4f*>(mClothData.mTargetCollisionSpheres); + const T4f* targetSpheres = reinterpret_cast<const T4f*>(mClothData.mTargetCollisionSpheres); // generate sphere and cone collision data if (!lastIteration) { // interpolate spheres - LerpIterator<Simd4f, const Simd4f*> pIter(reinterpret_cast<const Simd4f*>(mClothData.mStartCollisionSpheres), + LerpIterator<T4f, const T4f*> pIter(reinterpret_cast<const T4f*>(mClothData.mStartCollisionSpheres), targetSpheres, state.getCurrentAlpha()); - generateSpheres(reinterpret_cast<Simd4f*>(mCurData.mSpheres), pIter, mClothData.mNumSpheres); + generateSpheres(reinterpret_cast<T4f*>(mCurData.mSpheres), pIter, mClothData.mNumSpheres); } else { // otherwise use the target spheres directly - generateSpheres(reinterpret_cast<Simd4f*>(mCurData.mSpheres), targetSpheres, mClothData.mNumSpheres); + generateSpheres(reinterpret_cast<T4f*>(mCurData.mSpheres), targetSpheres, mClothData.mNumSpheres); } // generate cones even if test below fails because @@ -323,8 +323,8 @@ void cloth::SwCollision<Simd4f>::operator()(const IterationState<Simd4f>& state) shdfnd::swap(mCurData, mPrevData); } -template <typename Simd4f> -size_t cloth::SwCollision<Simd4f>::estimateTemporaryMemory(const SwCloth& cloth) +template <typename T4f> +size_t cloth::SwCollision<T4f>::estimateTemporaryMemory(const SwCloth& cloth) { size_t numTriangles = cloth.mStartCollisionTriangles.size(); size_t numPlanes = cloth.mStartCollisionPlanes.size(); @@ -335,8 +335,8 @@ size_t cloth::SwCollision<Simd4f>::estimateTemporaryMemory(const SwCloth& cloth) return std::max(kTriangleDataSize, kPlaneDataSize); } -template <typename Simd4f> -size_t cloth::SwCollision<Simd4f>::estimatePersistentMemory(const SwCloth& cloth) +template <typename T4f> +size_t cloth::SwCollision<T4f>::estimatePersistentMemory(const SwCloth& cloth) { size_t numCapsules = cloth.mCapsuleIndices.size(); size_t numSpheres = cloth.mStartCollisionSpheres.size(); @@ -347,74 +347,74 @@ size_t cloth::SwCollision<Simd4f>::estimatePersistentMemory(const SwCloth& cloth return sphereDataSize + coneDataSize; } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::allocate(CollisionData& data) +template <typename T4f> +void cloth::SwCollision<T4f>::allocate(CollisionData& data) { data.mSpheres = static_cast<SphereData*>(mAllocator.allocate(sizeof(SphereData) * mClothData.mNumSpheres)); data.mCones = static_cast<ConeData*>(mAllocator.allocate(sizeof(ConeData) * mClothData.mNumCapsules)); } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::deallocate(const CollisionData& data) +template <typename T4f> +void cloth::SwCollision<T4f>::deallocate(const CollisionData& data) { mAllocator.deallocate(data.mSpheres); mAllocator.deallocate(data.mCones); } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::computeBounds() +template <typename T4f> +void cloth::SwCollision<T4f>::computeBounds() { NV_CLOTH_PROFILE_ZONE("cloth::SwSolverKernel::computeBounds", /*ProfileContext::None*/ 0); - Simd4f* prevIt = reinterpret_cast<Simd4f*>(mClothData.mPrevParticles); - Simd4f* curIt = reinterpret_cast<Simd4f*>(mClothData.mCurParticles); - Simd4f* curEnd = curIt + mClothData.mNumParticles; - Simd4f floatMaxXYZ = -static_cast<Simd4f>(sMinusFloatMaxXYZ); + T4f* prevIt = reinterpret_cast<T4f*>(mClothData.mPrevParticles); + T4f* curIt = reinterpret_cast<T4f*>(mClothData.mCurParticles); + T4f* curEnd = curIt + mClothData.mNumParticles; + T4f floatMaxXYZ = -static_cast<T4f>(sMinusFloatMaxXYZ); - Simd4f lower = simd4f(FLT_MAX), upper = -lower; + T4f lower = simd4f(FLT_MAX), upper = -lower; for (; curIt < curEnd; ++curIt, ++prevIt) { - Simd4f current = *curIt; + T4f current = *curIt; lower = min(lower, current); upper = max(upper, current); // if (current.w > 0) current.w = previous.w *curIt = select(current > floatMaxXYZ, *prevIt, current); } - BoundingBox<Simd4f> curBounds; + BoundingBox<T4f> curBounds; curBounds.mLower = lower; curBounds.mUpper = upper; // don't change this order, storeBounds writes 7 floats - BoundingBox<Simd4f> prevBounds = loadBounds<Simd4f>(mClothData.mCurBounds); + BoundingBox<T4f> prevBounds = loadBounds<T4f>(mClothData.mCurBounds); storeBounds(mClothData.mCurBounds, curBounds); storeBounds(mClothData.mPrevBounds, prevBounds); } namespace { -template <typename Simd4i> -Simd4i andNotIsZero(const Simd4i& left, const Simd4i& right) +template <typename T4i> +T4i andNotIsZero(const T4i& left, const T4i& right) { return (left & ~right) == gSimd4iZero; } } // build per-axis mask arrays of spheres on the right/left of grid cell -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::buildSphereAcceleration(const SphereData* sIt) +template <typename T4f> +void cloth::SwCollision<T4f>::buildSphereAcceleration(const SphereData* sIt) { static const int maxIndex = sGridSize - 1; const SphereData* sEnd = sIt + mClothData.mNumSpheres; for (uint32_t mask = 0x1; sIt != sEnd; ++sIt, mask <<= 1) { - Simd4f sphere = loadAligned(array(sIt->center)); - Simd4f radius = splat<3>(sphere); + T4f sphere = loadAligned(array(sIt->center)); + T4f radius = splat<3>(sphere); - Simd4i first = intFloor(max((sphere - radius) * mGridScale + mGridBias, gSimd4fZero)); - Simd4i last = intFloor(min((sphere + radius) * mGridScale + mGridBias, sGridLength)); + T4i first = intFloor(max((sphere - radius) * mGridScale + mGridBias, gSimd4fZero)); + T4i last = intFloor(min((sphere + radius) * mGridScale + mGridBias, sGridLength)); const int* firstIdx = array(first); const int* lastIdx = array(last); @@ -434,8 +434,8 @@ void cloth::SwCollision<Simd4f>::buildSphereAcceleration(const SphereData* sIt) } // generate cone masks from sphere masks -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::buildConeAcceleration() +template <typename T4f> +void cloth::SwCollision<T4f>::buildConeAcceleration() { const ConeData* coneIt = mCurData.mCones; const ConeData* coneEnd = coneIt + mClothData.mNumCapsules; @@ -456,8 +456,8 @@ void cloth::SwCollision<Simd4f>::buildConeAcceleration() } // convert right/left mask arrays into single overlap array -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::mergeAcceleration(uint32_t* firstIt) +template <typename T4f> +void cloth::SwCollision<T4f>::mergeAcceleration(uint32_t* firstIt) { uint32_t* firstEnd = firstIt + 3 * sGridSize; uint32_t* lastIt = firstEnd; @@ -466,28 +466,28 @@ void cloth::SwCollision<Simd4f>::mergeAcceleration(uint32_t* firstIt) } // build mask of spheres/cones touching a regular grid along each axis -template <typename Simd4f> -bool cloth::SwCollision<Simd4f>::buildAcceleration() +template <typename T4f> +bool cloth::SwCollision<T4f>::buildAcceleration() { // determine sphere bbox - BoundingBox<Simd4f> sphereBounds = - expandBounds(emptyBounds<Simd4f>(), mCurData.mSpheres, mCurData.mSpheres + mClothData.mNumSpheres); - BoundingBox<Simd4f> particleBounds = loadBounds<Simd4f>(mClothData.mCurBounds); + BoundingBox<T4f> sphereBounds = + expandBounds(emptyBounds<T4f>(), mCurData.mSpheres, mCurData.mSpheres + mClothData.mNumSpheres); + BoundingBox<T4f> particleBounds = loadBounds<T4f>(mClothData.mCurBounds); if (mClothData.mEnableContinuousCollision) { sphereBounds = expandBounds(sphereBounds, mPrevData.mSpheres, mPrevData.mSpheres + mClothData.mNumSpheres); - particleBounds = expandBounds(particleBounds, loadBounds<Simd4f>(mClothData.mPrevBounds)); + particleBounds = expandBounds(particleBounds, loadBounds<T4f>(mClothData.mPrevBounds)); } - BoundingBox<Simd4f> bounds = intersectBounds(sphereBounds, particleBounds); - Simd4f edgeLength = (bounds.mUpper - bounds.mLower) & ~static_cast<Simd4f>(sMaskW); + BoundingBox<T4f> bounds = intersectBounds(sphereBounds, particleBounds); + T4f edgeLength = (bounds.mUpper - bounds.mLower) & ~static_cast<T4f>(sMaskW); if (!allGreaterEqual(edgeLength, gSimd4fZero)) return false; // calculate an expanded bounds to account for numerical inaccuracy - const Simd4f expandedLower = bounds.mLower - abs(bounds.mLower) * sGridExpand; - const Simd4f expandedUpper = bounds.mUpper + abs(bounds.mUpper) * sGridExpand; - const Simd4f expandedEdgeLength = max(expandedUpper - expandedLower, gSimd4fEpsilon); + const T4f expandedLower = bounds.mLower - abs(bounds.mLower) * sGridExpand; + const T4f expandedUpper = bounds.mUpper + abs(bounds.mUpper) * sGridExpand; + const T4f expandedEdgeLength = max(expandedUpper - expandedLower, gSimd4fEpsilon); // make grid minimal thickness and strict upper bound of spheres mGridScale = sGridLength * recip<1>(expandedEdgeLength); @@ -514,8 +514,8 @@ bool cloth::SwCollision<Simd4f>::buildAcceleration() #define FORCE_INLINE inline __attribute__((always_inline)) #endif -template <typename Simd4f> -FORCE_INLINE typename cloth::SwCollision<Simd4f>::ShapeMask& cloth::SwCollision<Simd4f>::ShapeMask:: +template <typename T4f> +FORCE_INLINE typename cloth::SwCollision<T4f>::ShapeMask& cloth::SwCollision<T4f>::ShapeMask:: operator = (const ShapeMask& right) { mCones = right.mCones; @@ -523,8 +523,8 @@ operator = (const ShapeMask& right) return *this; } -template <typename Simd4f> -FORCE_INLINE typename cloth::SwCollision<Simd4f>::ShapeMask& cloth::SwCollision<Simd4f>::ShapeMask:: +template <typename T4f> +FORCE_INLINE typename cloth::SwCollision<T4f>::ShapeMask& cloth::SwCollision<T4f>::ShapeMask:: operator &= (const ShapeMask& right) { mCones = mCones & right.mCones; @@ -532,12 +532,12 @@ operator &= (const ShapeMask& right) return *this; } -template <typename Simd4f> -FORCE_INLINE typename cloth::SwCollision<Simd4f>::ShapeMask -cloth::SwCollision<Simd4f>::getShapeMask(const Simd4f& position, const Simd4i* __restrict sphereGrid, - const Simd4i* __restrict coneGrid) +template <typename T4f> +FORCE_INLINE typename cloth::SwCollision<T4f>::ShapeMask +cloth::SwCollision<T4f>::getShapeMask(const T4f& position, const T4i* __restrict sphereGrid, + const T4i* __restrict coneGrid) { - Gather<Simd4i> gather(intFloor(position)); + Gather<T4i> gather(intFloor(position)); ShapeMask result; result.mCones = gather(coneGrid); @@ -546,13 +546,13 @@ cloth::SwCollision<Simd4f>::getShapeMask(const Simd4f& position, const Simd4i* _ } // lookup acceleration structure and return mask of potential intersectors -template <typename Simd4f> -FORCE_INLINE typename cloth::SwCollision<Simd4f>::ShapeMask -cloth::SwCollision<Simd4f>::getShapeMask(const Simd4f* __restrict positions) const +template <typename T4f> +FORCE_INLINE typename cloth::SwCollision<T4f>::ShapeMask +cloth::SwCollision<T4f>::getShapeMask(const T4f* __restrict positions) const { - Simd4f posX = positions[0] * splat<0>(mGridScale) + splat<0>(mGridBias); - Simd4f posY = positions[1] * splat<1>(mGridScale) + splat<1>(mGridBias); - Simd4f posZ = positions[2] * splat<2>(mGridScale) + splat<2>(mGridBias); + T4f posX = positions[0] * splat<0>(mGridScale) + splat<0>(mGridBias); + T4f posY = positions[1] * splat<1>(mGridScale) + splat<1>(mGridBias); + T4f posZ = positions[2] * splat<2>(mGridScale) + splat<2>(mGridBias); ShapeMask result = getShapeMask(posX, mSphereGrid, mConeGrid); result &= getShapeMask(posY, mSphereGrid + 2, mConeGrid + 2); @@ -562,38 +562,38 @@ cloth::SwCollision<Simd4f>::getShapeMask(const Simd4f* __restrict positions) con } // lookup acceleration structure and return mask of potential intersectors -template <typename Simd4f> -FORCE_INLINE typename cloth::SwCollision<Simd4f>::ShapeMask -cloth::SwCollision<Simd4f>::getShapeMask(const Simd4f* __restrict prevPos, const Simd4f* __restrict curPos) const +template <typename T4f> +FORCE_INLINE typename cloth::SwCollision<T4f>::ShapeMask +cloth::SwCollision<T4f>::getShapeMask(const T4f* __restrict prevPos, const T4f* __restrict curPos) const { - Simd4f scaleX = splat<0>(mGridScale); - Simd4f scaleY = splat<1>(mGridScale); - Simd4f scaleZ = splat<2>(mGridScale); + T4f scaleX = splat<0>(mGridScale); + T4f scaleY = splat<1>(mGridScale); + T4f scaleZ = splat<2>(mGridScale); - Simd4f biasX = splat<0>(mGridBias); - Simd4f biasY = splat<1>(mGridBias); - Simd4f biasZ = splat<2>(mGridBias); + T4f biasX = splat<0>(mGridBias); + T4f biasY = splat<1>(mGridBias); + T4f biasZ = splat<2>(mGridBias); - Simd4f prevX = prevPos[0] * scaleX + biasX; - Simd4f prevY = prevPos[1] * scaleY + biasY; - Simd4f prevZ = prevPos[2] * scaleZ + biasZ; + T4f prevX = prevPos[0] * scaleX + biasX; + T4f prevY = prevPos[1] * scaleY + biasY; + T4f prevZ = prevPos[2] * scaleZ + biasZ; - Simd4f curX = curPos[0] * scaleX + biasX; - Simd4f curY = curPos[1] * scaleY + biasY; - Simd4f curZ = curPos[2] * scaleZ + biasZ; + T4f curX = curPos[0] * scaleX + biasX; + T4f curY = curPos[1] * scaleY + biasY; + T4f curZ = curPos[2] * scaleZ + biasZ; - Simd4f maxX = min(max(prevX, curX), sGridLength); - Simd4f maxY = min(max(prevY, curY), sGridLength); - Simd4f maxZ = min(max(prevZ, curZ), sGridLength); + T4f maxX = min(max(prevX, curX), sGridLength); + T4f maxY = min(max(prevY, curY), sGridLength); + T4f maxZ = min(max(prevZ, curZ), sGridLength); ShapeMask result = getShapeMask(maxX, mSphereGrid, mConeGrid); result &= getShapeMask(maxY, mSphereGrid + 2, mConeGrid + 2); result &= getShapeMask(maxZ, mSphereGrid + 4, mConeGrid + 4); - Simd4f zero = gSimd4fZero; - Simd4f minX = max(min(prevX, curX), zero); - Simd4f minY = max(min(prevY, curY), zero); - Simd4f minZ = max(min(prevZ, curZ), zero); + T4f zero = gSimd4fZero; + T4f minX = max(min(prevX, curX), zero); + T4f minY = max(min(prevY, curY), zero); + T4f minZ = max(min(prevZ, curZ), zero); result &= getShapeMask(minX, mSphereGrid + 6, mConeGrid + 6); result &= getShapeMask(minY, mSphereGrid + 8, mConeGrid + 8); @@ -602,8 +602,8 @@ cloth::SwCollision<Simd4f>::getShapeMask(const Simd4f* __restrict prevPos, const return result; } -template <typename Simd4f> -struct cloth::SwCollision<Simd4f>::ImpulseAccumulator +template <typename T4f> +struct cloth::SwCollision<T4f>::ImpulseAccumulator { ImpulseAccumulator() : mDeltaX(gSimd4fZero) @@ -616,21 +616,21 @@ struct cloth::SwCollision<Simd4f>::ImpulseAccumulator { } - void add(const Simd4f& x, const Simd4f& y, const Simd4f& z, const Simd4f& scale, const Simd4f& mask) + void add(const T4f& x, const T4f& y, const T4f& z, const T4f& scale, const T4f& mask) { NV_CLOTH_ASSERT(allTrue((mask & x) == (mask & x))); NV_CLOTH_ASSERT(allTrue((mask & y) == (mask & y))); NV_CLOTH_ASSERT(allTrue((mask & z) == (mask & z))); NV_CLOTH_ASSERT(allTrue((mask & scale) == (mask & scale))); - Simd4f maskedScale = scale & mask; + T4f maskedScale = scale & mask; mDeltaX = mDeltaX + x * maskedScale; mDeltaY = mDeltaY + y * maskedScale; mDeltaZ = mDeltaZ + z * maskedScale; mNumCollisions = mNumCollisions + (gSimd4fOne & mask); } - void addVelocity(const Simd4f& vx, const Simd4f& vy, const Simd4f& vz, const Simd4f& mask) + void addVelocity(const T4f& vx, const T4f& vy, const T4f& vz, const T4f& mask) { NV_CLOTH_ASSERT(allTrue((mask & vx) == (mask & vx))); NV_CLOTH_ASSERT(allTrue((mask & vy) == (mask & vy))); @@ -641,34 +641,34 @@ struct cloth::SwCollision<Simd4f>::ImpulseAccumulator mVelZ = mVelZ + (vz & mask); } - void subtract(const Simd4f& x, const Simd4f& y, const Simd4f& z, const Simd4f& scale, const Simd4f& mask) + void subtract(const T4f& x, const T4f& y, const T4f& z, const T4f& scale, const T4f& mask) { NV_CLOTH_ASSERT(allTrue((mask & x) == (mask & x))); NV_CLOTH_ASSERT(allTrue((mask & y) == (mask & y))); NV_CLOTH_ASSERT(allTrue((mask & z) == (mask & z))); NV_CLOTH_ASSERT(allTrue((mask & scale) == (mask & scale))); - Simd4f maskedScale = scale & mask; + T4f maskedScale = scale & mask; mDeltaX = mDeltaX - x * maskedScale; mDeltaY = mDeltaY - y * maskedScale; mDeltaZ = mDeltaZ - z * maskedScale; mNumCollisions = mNumCollisions + (gSimd4fOne & mask); } - Simd4f mDeltaX, mDeltaY, mDeltaZ; - Simd4f mVelX, mVelY, mVelZ; - Simd4f mNumCollisions; + T4f mDeltaX, mDeltaY, mDeltaZ; + T4f mVelX, mVelY, mVelZ; + T4f mNumCollisions; }; -template <typename Simd4f> -FORCE_INLINE void cloth::SwCollision<Simd4f>::collideSpheres(const Simd4i& sphereMask, const Simd4f* positions, +template <typename T4f> +FORCE_INLINE void cloth::SwCollision<T4f>::collideSpheres(const T4i& sphereMask, const T4f* positions, ImpulseAccumulator& accum) const { const float* __restrict spherePtr = array(mCurData.mSpheres->center); bool frictionEnabled = mClothData.mFrictionScale > 0.0f; - Simd4i mask4 = horizontalOr(sphereMask); + T4i mask4 = horizontalOr(sphereMask); uint32_t mask = uint32_t(array(mask4)[0]); while (mask) { @@ -676,16 +676,16 @@ FORCE_INLINE void cloth::SwCollision<Simd4f>::collideSpheres(const Simd4i& spher uint32_t offset = findBitSet(mask & ~test) * sizeof(SphereData); mask = mask & test; - Simd4f sphere = loadAligned(spherePtr, offset); + T4f sphere = loadAligned(spherePtr, offset); - Simd4f deltaX = positions[0] - splat<0>(sphere); - Simd4f deltaY = positions[1] - splat<1>(sphere); - Simd4f deltaZ = positions[2] - splat<2>(sphere); + T4f deltaX = positions[0] - splat<0>(sphere); + T4f deltaY = positions[1] - splat<1>(sphere); + T4f deltaZ = positions[2] - splat<2>(sphere); - Simd4f sqrDistance = gSimd4fEpsilon + deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; - Simd4f negativeScale = gSimd4fOne - rsqrt(sqrDistance) * splat<3>(sphere); + T4f sqrDistance = gSimd4fEpsilon + deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; + T4f negativeScale = gSimd4fOne - rsqrt(sqrDistance) * splat<3>(sphere); - Simd4f contactMask; + T4f contactMask; if (!anyGreater(gSimd4fZero, negativeScale, contactMask)) continue; @@ -696,17 +696,17 @@ FORCE_INLINE void cloth::SwCollision<Simd4f>::collideSpheres(const Simd4i& spher // load previous sphere pos const float* __restrict prevSpherePtr = array(mPrevData.mSpheres->center); - Simd4f prevSphere = loadAligned(prevSpherePtr, offset); - Simd4f velocity = sphere - prevSphere; + T4f prevSphere = loadAligned(prevSpherePtr, offset); + T4f velocity = sphere - prevSphere; accum.addVelocity(splat<0>(velocity), splat<1>(velocity), splat<2>(velocity), contactMask); } } } -template <typename Simd4f> -FORCE_INLINE typename cloth::SwCollision<Simd4f>::Simd4i -cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict positions, ImpulseAccumulator& accum) const +template <typename T4f> +FORCE_INLINE typename cloth::SwCollision<T4f>::T4i +cloth::SwCollision<T4f>::collideCones(const T4f* __restrict positions, ImpulseAccumulator& accum) const { const float* __restrict centerPtr = array(mCurData.mCones->center); const float* __restrict axisPtr = array(mCurData.mCones->axis); @@ -715,7 +715,7 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict positions, Imp bool frictionEnabled = mClothData.mFrictionScale > 0.0f; ShapeMask shapeMask = getShapeMask(positions); - Simd4i mask4 = horizontalOr(shapeMask.mCones); + T4i mask4 = horizontalOr(shapeMask.mCones); uint32_t mask = uint32_t(array(mask4)[0]); while (mask) { @@ -724,35 +724,35 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict positions, Imp uint32_t offset = coneIndex * sizeof(ConeData); mask = mask & test; - Simd4i test4 = mask4 - gSimd4iOne; - Simd4f culled = simd4f(andNotIsZero(shapeMask.mCones, test4)); + T4i test4 = mask4 - gSimd4iOne; + T4f culled = simd4f(andNotIsZero(shapeMask.mCones, test4)); mask4 = mask4 & test4; - Simd4f center = loadAligned(centerPtr, offset); + T4f center = loadAligned(centerPtr, offset); - Simd4f deltaX = positions[0] - splat<0>(center); - Simd4f deltaY = positions[1] - splat<1>(center); - Simd4f deltaZ = positions[2] - splat<2>(center); + T4f deltaX = positions[0] - splat<0>(center); + T4f deltaY = positions[1] - splat<1>(center); + T4f deltaZ = positions[2] - splat<2>(center); - Simd4f axis = loadAligned(axisPtr, offset); + T4f axis = loadAligned(axisPtr, offset); - Simd4f axisX = splat<0>(axis); - Simd4f axisY = splat<1>(axis); - Simd4f axisZ = splat<2>(axis); - Simd4f slope = splat<3>(axis); + T4f axisX = splat<0>(axis); + T4f axisY = splat<1>(axis); + T4f axisZ = splat<2>(axis); + T4f slope = splat<3>(axis); - Simd4f dot = deltaX * axisX + deltaY * axisY + deltaZ * axisZ; - Simd4f radius = dot * slope + splat<3>(center); + T4f dot = deltaX * axisX + deltaY * axisY + deltaZ * axisZ; + T4f radius = dot * slope + splat<3>(center); // set radius to zero if cone is culled radius = max(radius, gSimd4fZero) & ~culled; - Simd4f sqrDistance = deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ - dot * dot; + T4f sqrDistance = deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ - dot * dot; - Simd4i auxiliary = loadAligned(auxiliaryPtr, offset); - Simd4i bothMask = splat<3>(auxiliary); + T4i auxiliary = loadAligned(auxiliaryPtr, offset); + T4i bothMask = splat<3>(auxiliary); - Simd4f contactMask; + T4f contactMask; if (!anyGreater(radius * radius, sqrDistance, contactMask)) { // cone only culled when spheres culled, ok to clear those too @@ -764,19 +764,19 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict positions, Imp // making sqrDistance negative when point lies on the cone axis sqrDistance = max(sqrDistance, gSimd4fEpsilon); - Simd4f invDistance = rsqrt(sqrDistance); - Simd4f base = dot + slope * sqrDistance * invDistance; + T4f invDistance = rsqrt(sqrDistance); + T4f base = dot + slope * sqrDistance * invDistance; // force left/rightMask to false if not inside cone base = base & contactMask; - Simd4f halfLength = splat<1>(simd4f(auxiliary)); - Simd4i leftMask = simd4i(base < -halfLength); - Simd4i rightMask = simd4i(base > halfLength); + T4f halfLength = splat<1>(simd4f(auxiliary)); + T4i leftMask = simd4i(base < -halfLength); + T4i rightMask = simd4i(base > halfLength); // we use both mask because of the early out above. - Simd4i firstMask = splat<2>(auxiliary); - Simd4i secondMask = firstMask ^ bothMask; + T4i firstMask = splat<2>(auxiliary); + T4i secondMask = firstMask ^ bothMask; shapeMask.mSpheres = shapeMask.mSpheres & ~(firstMask & ~leftMask); shapeMask.mSpheres = shapeMask.mSpheres & ~(secondMask & ~rightMask); @@ -784,8 +784,8 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict positions, Imp deltaY = deltaY - base * axisY; deltaZ = deltaZ - base * axisZ; - Simd4f sqrCosine = splat<0>(simd4f(auxiliary)); - Simd4f scale = radius * invDistance * sqrCosine - sqrCosine; + T4f sqrCosine = splat<0>(simd4f(auxiliary)); + T4f scale = radius * invDistance * sqrCosine - sqrCosine; contactMask = contactMask & ~simd4f(leftMask | rightMask); @@ -804,23 +804,23 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict positions, Imp // todo: could pre-compute sphere velocities or it might be // faster to compute cur/prev sphere positions directly - Simd4f s0p0 = loadAligned(prevSpheres, s0 * sizeof(SphereData)); - Simd4f s0p1 = loadAligned(curSpheres, s0 * sizeof(SphereData)); + T4f s0p0 = loadAligned(prevSpheres, s0 * sizeof(SphereData)); + T4f s0p1 = loadAligned(curSpheres, s0 * sizeof(SphereData)); - Simd4f s1p0 = loadAligned(prevSpheres, s1 * sizeof(SphereData)); - Simd4f s1p1 = loadAligned(curSpheres, s1 * sizeof(SphereData)); + T4f s1p0 = loadAligned(prevSpheres, s1 * sizeof(SphereData)); + T4f s1p1 = loadAligned(curSpheres, s1 * sizeof(SphereData)); - Simd4f v0 = s0p1 - s0p0; - Simd4f v1 = s1p1 - s1p0; - Simd4f vd = v1 - v0; + T4f v0 = s0p1 - s0p0; + T4f v1 = s1p1 - s1p0; + T4f vd = v1 - v0; // dot is in the range -1 to 1, scale and bias to 0 to 1 dot = dot * gSimd4fHalf + gSimd4fHalf; // interpolate velocity at contact points - Simd4f vx = splat<0>(v0) + dot * splat<0>(vd); - Simd4f vy = splat<1>(v0) + dot * splat<1>(vd); - Simd4f vz = splat<2>(v0) + dot * splat<2>(vd); + T4f vx = splat<0>(v0) + dot * splat<0>(vd); + T4f vy = splat<1>(v0) + dot * splat<1>(vd); + T4f vz = splat<2>(v0) + dot * splat<2>(vd); accum.addVelocity(vx, vy, vz, contactMask); } @@ -829,16 +829,16 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict positions, Imp return shapeMask.mSpheres; } -template <typename Simd4f> -FORCE_INLINE void cloth::SwCollision<Simd4f>::collideSpheres(const Simd4i& sphereMask, const Simd4f* __restrict prevPos, - Simd4f* __restrict curPos, ImpulseAccumulator& accum) const +template <typename T4f> +FORCE_INLINE void cloth::SwCollision<T4f>::collideSpheres(const T4i& sphereMask, const T4f* __restrict prevPos, + T4f* __restrict curPos, ImpulseAccumulator& accum) const { const float* __restrict prevSpheres = array(mPrevData.mSpheres->center); const float* __restrict curSpheres = array(mCurData.mSpheres->center); bool frictionEnabled = mClothData.mFrictionScale > 0.0f; - Simd4i mask4 = horizontalOr(sphereMask); + T4i mask4 = horizontalOr(sphereMask); uint32_t mask = uint32_t(array(mask4)[0]); while (mask) { @@ -846,53 +846,53 @@ FORCE_INLINE void cloth::SwCollision<Simd4f>::collideSpheres(const Simd4i& spher uint32_t offset = findBitSet(mask & ~test) * sizeof(SphereData); mask = mask & test; - Simd4f prevSphere = loadAligned(prevSpheres, offset); - Simd4f prevX = prevPos[0] - splat<0>(prevSphere); - Simd4f prevY = prevPos[1] - splat<1>(prevSphere); - Simd4f prevZ = prevPos[2] - splat<2>(prevSphere); - Simd4f prevRadius = splat<3>(prevSphere); + T4f prevSphere = loadAligned(prevSpheres, offset); + T4f prevX = prevPos[0] - splat<0>(prevSphere); + T4f prevY = prevPos[1] - splat<1>(prevSphere); + T4f prevZ = prevPos[2] - splat<2>(prevSphere); + T4f prevRadius = splat<3>(prevSphere); - Simd4f curSphere = loadAligned(curSpheres, offset); - Simd4f curX = curPos[0] - splat<0>(curSphere); - Simd4f curY = curPos[1] - splat<1>(curSphere); - Simd4f curZ = curPos[2] - splat<2>(curSphere); - Simd4f curRadius = splat<3>(curSphere); + T4f curSphere = loadAligned(curSpheres, offset); + T4f curX = curPos[0] - splat<0>(curSphere); + T4f curY = curPos[1] - splat<1>(curSphere); + T4f curZ = curPos[2] - splat<2>(curSphere); + T4f curRadius = splat<3>(curSphere); - Simd4f sqrDistance = gSimd4fEpsilon + curX * curX + curY * curY + curZ * curZ; + T4f sqrDistance = gSimd4fEpsilon + curX * curX + curY * curY + curZ * curZ; - Simd4f dotPrevPrev = prevX * prevX + prevY * prevY + prevZ * prevZ - prevRadius * prevRadius; - Simd4f dotPrevCur = prevX * curX + prevY * curY + prevZ * curZ - prevRadius * curRadius; - Simd4f dotCurCur = sqrDistance - curRadius * curRadius; + T4f dotPrevPrev = prevX * prevX + prevY * prevY + prevZ * prevZ - prevRadius * prevRadius; + T4f dotPrevCur = prevX * curX + prevY * curY + prevZ * curZ - prevRadius * curRadius; + T4f dotCurCur = sqrDistance - curRadius * curRadius; - Simd4f discriminant = dotPrevCur * dotPrevCur - dotCurCur * dotPrevPrev; - Simd4f sqrtD = sqrt(discriminant); - Simd4f halfB = dotPrevCur - dotPrevPrev; - Simd4f minusA = dotPrevCur - dotCurCur + halfB; + T4f discriminant = dotPrevCur * dotPrevCur - dotCurCur * dotPrevPrev; + T4f sqrtD = sqrt(discriminant); + T4f halfB = dotPrevCur - dotPrevPrev; + T4f minusA = dotPrevCur - dotCurCur + halfB; // time of impact or 0 if prevPos inside sphere - Simd4f toi = recip(minusA) * min(gSimd4fZero, halfB + sqrtD); - Simd4f collisionMask = (toi < gSimd4fOne) & (halfB < sqrtD); + T4f toi = recip(minusA) * min(gSimd4fZero, halfB + sqrtD); + T4f collisionMask = (toi < gSimd4fOne) & (halfB < sqrtD); // skip continuous collision if the (un-clamped) particle // trajectory only touches the outer skin of the cone. - Simd4f rMin = prevRadius + halfB * minusA * (curRadius - prevRadius); + T4f rMin = prevRadius + halfB * minusA * (curRadius - prevRadius); collisionMask = collisionMask & (discriminant > minusA * rMin * rMin * sSkeletonWidth); // a is negative when one sphere is contained in the other, // which is already handled by discrete collision. - collisionMask = collisionMask & (minusA < -static_cast<Simd4f>(gSimd4fEpsilon)); + collisionMask = collisionMask & (minusA < -static_cast<T4f>(gSimd4fEpsilon)); if (!allEqual(collisionMask, gSimd4fZero)) { - Simd4f deltaX = prevX - curX; - Simd4f deltaY = prevY - curY; - Simd4f deltaZ = prevZ - curZ; + T4f deltaX = prevX - curX; + T4f deltaY = prevY - curY; + T4f deltaZ = prevZ - curZ; - Simd4f oneMinusToi = (gSimd4fOne - toi) & collisionMask; + T4f oneMinusToi = (gSimd4fOne - toi) & collisionMask; // reduce ccd impulse if (clamped) particle trajectory stays in sphere skin, // i.e. scale by exp2(-k) or 1/(1+k) with k = (tmin - toi) / (1 - toi) - Simd4f minusK = sqrtD * recip(minusA * oneMinusToi) & (oneMinusToi > gSimd4fEpsilon); + T4f minusK = sqrtD * recip(minusA * oneMinusToi) & (oneMinusToi > gSimd4fEpsilon); oneMinusToi = oneMinusToi * recip(gSimd4fOne - minusK); curX = curX + deltaX * oneMinusToi; @@ -906,9 +906,9 @@ FORCE_INLINE void cloth::SwCollision<Simd4f>::collideSpheres(const Simd4i& spher sqrDistance = gSimd4fEpsilon + curX * curX + curY * curY + curZ * curZ; } - Simd4f negativeScale = gSimd4fOne - rsqrt(sqrDistance) * curRadius; + T4f negativeScale = gSimd4fOne - rsqrt(sqrDistance) * curRadius; - Simd4f contactMask; + T4f contactMask; if (!anyGreater(gSimd4fZero, negativeScale, contactMask)) continue; @@ -916,15 +916,15 @@ FORCE_INLINE void cloth::SwCollision<Simd4f>::collideSpheres(const Simd4i& spher if (frictionEnabled) { - Simd4f velocity = curSphere - prevSphere; + T4f velocity = curSphere - prevSphere; accum.addVelocity(splat<0>(velocity), splat<1>(velocity), splat<2>(velocity), contactMask); } } } -template <typename Simd4f> -FORCE_INLINE typename cloth::SwCollision<Simd4f>::Simd4i -cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict prevPos, Simd4f* __restrict curPos, +template <typename T4f> +FORCE_INLINE typename cloth::SwCollision<T4f>::T4i +cloth::SwCollision<T4f>::collideCones(const T4f* __restrict prevPos, T4f* __restrict curPos, ImpulseAccumulator& accum) const { const float* __restrict prevCenterPtr = array(mPrevData.mCones->center); @@ -938,7 +938,7 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict prevPos, Simd4 bool frictionEnabled = mClothData.mFrictionScale > 0.0f; ShapeMask shapeMask = getShapeMask(prevPos, curPos); - Simd4i mask4 = horizontalOr(shapeMask.mCones); + T4i mask4 = horizontalOr(shapeMask.mCones); uint32_t mask = uint32_t(array(mask4)[0]); while (mask) { @@ -947,106 +947,106 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict prevPos, Simd4 uint32_t offset = coneIndex * sizeof(ConeData); mask = mask & test; - Simd4i test4 = mask4 - gSimd4iOne; - Simd4f culled = simd4f(andNotIsZero(shapeMask.mCones, test4)); + T4i test4 = mask4 - gSimd4iOne; + T4f culled = simd4f(andNotIsZero(shapeMask.mCones, test4)); mask4 = mask4 & test4; - Simd4f prevCenter = loadAligned(prevCenterPtr, offset); - Simd4f prevAxis = loadAligned(prevAxisPtr, offset); - Simd4f prevAxisX = splat<0>(prevAxis); - Simd4f prevAxisY = splat<1>(prevAxis); - Simd4f prevAxisZ = splat<2>(prevAxis); - Simd4f prevSlope = splat<3>(prevAxis); - - Simd4f prevX = prevPos[0] - splat<0>(prevCenter); - Simd4f prevY = prevPos[1] - splat<1>(prevCenter); - Simd4f prevZ = prevPos[2] - splat<2>(prevCenter); - Simd4f prevT = prevY * prevAxisZ - prevZ * prevAxisY; - Simd4f prevU = prevZ * prevAxisX - prevX * prevAxisZ; - Simd4f prevV = prevX * prevAxisY - prevY * prevAxisX; - Simd4f prevDot = prevX * prevAxisX + prevY * prevAxisY + prevZ * prevAxisZ; - Simd4f prevRadius = prevDot * prevSlope + splat<3>(prevCenter); - - Simd4f curCenter = loadAligned(curCenterPtr, offset); - Simd4f curAxis = loadAligned(curAxisPtr, offset); - Simd4f curAxisX = splat<0>(curAxis); - Simd4f curAxisY = splat<1>(curAxis); - Simd4f curAxisZ = splat<2>(curAxis); - Simd4f curSlope = splat<3>(curAxis); - Simd4i curAuxiliary = loadAligned(curAuxiliaryPtr, offset); - - Simd4f curX = curPos[0] - splat<0>(curCenter); - Simd4f curY = curPos[1] - splat<1>(curCenter); - Simd4f curZ = curPos[2] - splat<2>(curCenter); - Simd4f curT = curY * curAxisZ - curZ * curAxisY; - Simd4f curU = curZ * curAxisX - curX * curAxisZ; - Simd4f curV = curX * curAxisY - curY * curAxisX; - Simd4f curDot = curX * curAxisX + curY * curAxisY + curZ * curAxisZ; - Simd4f curRadius = curDot * curSlope + splat<3>(curCenter); - - Simd4f curSqrDistance = gSimd4fEpsilon + curT * curT + curU * curU + curV * curV; + T4f prevCenter = loadAligned(prevCenterPtr, offset); + T4f prevAxis = loadAligned(prevAxisPtr, offset); + T4f prevAxisX = splat<0>(prevAxis); + T4f prevAxisY = splat<1>(prevAxis); + T4f prevAxisZ = splat<2>(prevAxis); + T4f prevSlope = splat<3>(prevAxis); + + T4f prevX = prevPos[0] - splat<0>(prevCenter); + T4f prevY = prevPos[1] - splat<1>(prevCenter); + T4f prevZ = prevPos[2] - splat<2>(prevCenter); + T4f prevT = prevY * prevAxisZ - prevZ * prevAxisY; + T4f prevU = prevZ * prevAxisX - prevX * prevAxisZ; + T4f prevV = prevX * prevAxisY - prevY * prevAxisX; + T4f prevDot = prevX * prevAxisX + prevY * prevAxisY + prevZ * prevAxisZ; + T4f prevRadius = prevDot * prevSlope + splat<3>(prevCenter); + + T4f curCenter = loadAligned(curCenterPtr, offset); + T4f curAxis = loadAligned(curAxisPtr, offset); + T4f curAxisX = splat<0>(curAxis); + T4f curAxisY = splat<1>(curAxis); + T4f curAxisZ = splat<2>(curAxis); + T4f curSlope = splat<3>(curAxis); + T4i curAuxiliary = loadAligned(curAuxiliaryPtr, offset); + + T4f curX = curPos[0] - splat<0>(curCenter); + T4f curY = curPos[1] - splat<1>(curCenter); + T4f curZ = curPos[2] - splat<2>(curCenter); + T4f curT = curY * curAxisZ - curZ * curAxisY; + T4f curU = curZ * curAxisX - curX * curAxisZ; + T4f curV = curX * curAxisY - curY * curAxisX; + T4f curDot = curX * curAxisX + curY * curAxisY + curZ * curAxisZ; + T4f curRadius = curDot * curSlope + splat<3>(curCenter); + + T4f curSqrDistance = gSimd4fEpsilon + curT * curT + curU * curU + curV * curV; // set radius to zero if cone is culled prevRadius = max(prevRadius, gSimd4fZero) & ~culled; curRadius = max(curRadius, gSimd4fZero) & ~culled; - Simd4f dotPrevPrev = prevT * prevT + prevU * prevU + prevV * prevV - prevRadius * prevRadius; - Simd4f dotPrevCur = prevT * curT + prevU * curU + prevV * curV - prevRadius * curRadius; - Simd4f dotCurCur = curSqrDistance - curRadius * curRadius; + T4f dotPrevPrev = prevT * prevT + prevU * prevU + prevV * prevV - prevRadius * prevRadius; + T4f dotPrevCur = prevT * curT + prevU * curU + prevV * curV - prevRadius * curRadius; + T4f dotCurCur = curSqrDistance - curRadius * curRadius; - Simd4f discriminant = dotPrevCur * dotPrevCur - dotCurCur * dotPrevPrev; - Simd4f sqrtD = sqrt(discriminant); - Simd4f halfB = dotPrevCur - dotPrevPrev; - Simd4f minusA = dotPrevCur - dotCurCur + halfB; + T4f discriminant = dotPrevCur * dotPrevCur - dotCurCur * dotPrevPrev; + T4f sqrtD = sqrt(discriminant); + T4f halfB = dotPrevCur - dotPrevPrev; + T4f minusA = dotPrevCur - dotCurCur + halfB; // time of impact or 0 if prevPos inside cone - Simd4f toi = recip(minusA) * min(gSimd4fZero, halfB + sqrtD); - Simd4f collisionMask = (toi < gSimd4fOne) & (halfB < sqrtD); + T4f toi = recip(minusA) * min(gSimd4fZero, halfB + sqrtD); + T4f collisionMask = (toi < gSimd4fOne) & (halfB < sqrtD); // skip continuous collision if the (un-clamped) particle // trajectory only touches the outer skin of the cone. - Simd4f rMin = prevRadius + halfB * minusA * (curRadius - prevRadius); + T4f rMin = prevRadius + halfB * minusA * (curRadius - prevRadius); collisionMask = collisionMask & (discriminant > minusA * rMin * rMin * sSkeletonWidth); // a is negative when one cone is contained in the other, // which is already handled by discrete collision. - collisionMask = collisionMask & (minusA < -static_cast<Simd4f>(gSimd4fEpsilon)); + collisionMask = collisionMask & (minusA < -static_cast<T4f>(gSimd4fEpsilon)); // test if any particle hits infinite cone (and 0<time of impact<1) if (!allEqual(collisionMask, gSimd4fZero)) { - Simd4f deltaX = prevX - curX; - Simd4f deltaY = prevY - curY; - Simd4f deltaZ = prevZ - curZ; + T4f deltaX = prevX - curX; + T4f deltaY = prevY - curY; + T4f deltaZ = prevZ - curZ; // interpolate delta at toi - Simd4f posX = prevX - deltaX * toi; - Simd4f posY = prevY - deltaY * toi; - Simd4f posZ = prevZ - deltaZ * toi; + T4f posX = prevX - deltaX * toi; + T4f posY = prevY - deltaY * toi; + T4f posZ = prevZ - deltaZ * toi; - Simd4f curScaledAxis = curAxis * splat<1>(simd4f(curAuxiliary)); - Simd4i prevAuxiliary = loadAligned(prevAuxiliaryPtr, offset); - Simd4f deltaScaledAxis = curScaledAxis - prevAxis * splat<1>(simd4f(prevAuxiliary)); + T4f curScaledAxis = curAxis * splat<1>(simd4f(curAuxiliary)); + T4i prevAuxiliary = loadAligned(prevAuxiliaryPtr, offset); + T4f deltaScaledAxis = curScaledAxis - prevAxis * splat<1>(simd4f(prevAuxiliary)); - Simd4f oneMinusToi = gSimd4fOne - toi; + T4f oneMinusToi = gSimd4fOne - toi; // interpolate axis at toi - Simd4f axisX = splat<0>(curScaledAxis) - splat<0>(deltaScaledAxis) * oneMinusToi; - Simd4f axisY = splat<1>(curScaledAxis) - splat<1>(deltaScaledAxis) * oneMinusToi; - Simd4f axisZ = splat<2>(curScaledAxis) - splat<2>(deltaScaledAxis) * oneMinusToi; - Simd4f slope = (prevSlope * oneMinusToi + curSlope * toi); + T4f axisX = splat<0>(curScaledAxis) - splat<0>(deltaScaledAxis) * oneMinusToi; + T4f axisY = splat<1>(curScaledAxis) - splat<1>(deltaScaledAxis) * oneMinusToi; + T4f axisZ = splat<2>(curScaledAxis) - splat<2>(deltaScaledAxis) * oneMinusToi; + T4f slope = (prevSlope * oneMinusToi + curSlope * toi); - Simd4f sqrHalfLength = axisX * axisX + axisY * axisY + axisZ * axisZ; - Simd4f invHalfLength = rsqrt(sqrHalfLength); - Simd4f dot = (posX * axisX + posY * axisY + posZ * axisZ) * invHalfLength; + T4f sqrHalfLength = axisX * axisX + axisY * axisY + axisZ * axisZ; + T4f invHalfLength = rsqrt(sqrHalfLength); + T4f dot = (posX * axisX + posY * axisY + posZ * axisZ) * invHalfLength; - Simd4f sqrDistance = posX * posX + posY * posY + posZ * posZ - dot * dot; - Simd4f invDistance = rsqrt(sqrDistance) & (sqrDistance > gSimd4fZero); + T4f sqrDistance = posX * posX + posY * posY + posZ * posZ - dot * dot; + T4f invDistance = rsqrt(sqrDistance) & (sqrDistance > gSimd4fZero); - Simd4f base = dot + slope * sqrDistance * invDistance; - Simd4f scale = base * invHalfLength & collisionMask; + T4f base = dot + slope * sqrDistance * invDistance; + T4f scale = base * invHalfLength & collisionMask; - Simd4f cullMask = (abs(scale) < gSimd4fOne) & collisionMask; + T4f cullMask = (abs(scale) < gSimd4fOne) & collisionMask; // test if any impact position is in cone section if (!allEqual(cullMask, gSimd4fZero)) @@ -1060,7 +1060,7 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict prevPos, Simd4 // reduce ccd impulse if (clamped) particle trajectory stays in cone skin, // i.e. scale by exp2(-k) or 1/(1+k) with k = (tmin - toi) / (1 - toi) // oneMinusToi = oneMinusToi * recip(gSimd4fOne - sqrtD * recip(minusA * oneMinusToi)); - Simd4f minusK = sqrtD * recip(minusA * oneMinusToi) & (oneMinusToi > gSimd4fEpsilon); + T4f minusK = sqrtD * recip(minusA * oneMinusToi) & (oneMinusToi > gSimd4fEpsilon); oneMinusToi = oneMinusToi * recip(gSimd4fOne - minusK); curX = curX + deltaX * oneMinusToi; @@ -1079,39 +1079,39 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict prevPos, Simd4 } // curPos inside cone (discrete collision) - Simd4f contactMask; + T4f contactMask; int anyContact = anyGreater(curRadius * curRadius, curSqrDistance, contactMask); - Simd4i bothMask = splat<3>(curAuxiliary); + T4i bothMask = splat<3>(curAuxiliary); // instead of culling continuous collision for ~collisionMask, and discrete // collision for ~contactMask, disable both if ~collisionMask & ~contactMask - Simd4i cullMask = bothMask & ~simd4i(collisionMask | contactMask); + T4i cullMask = bothMask & ~simd4i(collisionMask | contactMask); shapeMask.mSpheres = shapeMask.mSpheres & ~cullMask; if (!anyContact) continue; - Simd4f invDistance = rsqrt(curSqrDistance) & (curSqrDistance > gSimd4fZero); - Simd4f base = curDot + curSlope * curSqrDistance * invDistance; + T4f invDistance = rsqrt(curSqrDistance) & (curSqrDistance > gSimd4fZero); + T4f base = curDot + curSlope * curSqrDistance * invDistance; - Simd4f halfLength = splat<1>(simd4f(curAuxiliary)); - Simd4i leftMask = simd4i(base < -halfLength); - Simd4i rightMask = simd4i(base > halfLength); + T4f halfLength = splat<1>(simd4f(curAuxiliary)); + T4i leftMask = simd4i(base < -halfLength); + T4i rightMask = simd4i(base > halfLength); // can only skip continuous sphere collision if post-ccd position // is on code side *and* particle had cone-ccd collision. - Simd4i firstMask = splat<2>(curAuxiliary); - Simd4i secondMask = firstMask ^ bothMask; + T4i firstMask = splat<2>(curAuxiliary); + T4i secondMask = firstMask ^ bothMask; cullMask = (firstMask & ~leftMask) | (secondMask & ~rightMask); shapeMask.mSpheres = shapeMask.mSpheres & ~(cullMask & simd4i(collisionMask)); - Simd4f deltaX = curX - base * curAxisX; - Simd4f deltaY = curY - base * curAxisY; - Simd4f deltaZ = curZ - base * curAxisZ; + T4f deltaX = curX - base * curAxisX; + T4f deltaY = curY - base * curAxisY; + T4f deltaZ = curZ - base * curAxisZ; - Simd4f sqrCosine = splat<0>(simd4f(curAuxiliary)); - Simd4f scale = curRadius * invDistance * sqrCosine - sqrCosine; + T4f sqrCosine = splat<0>(simd4f(curAuxiliary)); + T4f scale = curRadius * invDistance * sqrCosine - sqrCosine; contactMask = contactMask & ~simd4f(leftMask | rightMask); @@ -1130,23 +1130,23 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict prevPos, Simd4 // todo: could pre-compute sphere velocities or it might be // faster to compute cur/prev sphere positions directly - Simd4f s0p0 = loadAligned(prevSpheres, s0 * sizeof(SphereData)); - Simd4f s0p1 = loadAligned(curSpheres, s0 * sizeof(SphereData)); + T4f s0p0 = loadAligned(prevSpheres, s0 * sizeof(SphereData)); + T4f s0p1 = loadAligned(curSpheres, s0 * sizeof(SphereData)); - Simd4f s1p0 = loadAligned(prevSpheres, s1 * sizeof(SphereData)); - Simd4f s1p1 = loadAligned(curSpheres, s1 * sizeof(SphereData)); + T4f s1p0 = loadAligned(prevSpheres, s1 * sizeof(SphereData)); + T4f s1p1 = loadAligned(curSpheres, s1 * sizeof(SphereData)); - Simd4f v0 = s0p1 - s0p0; - Simd4f v1 = s1p1 - s1p0; - Simd4f vd = v1 - v0; + T4f v0 = s0p1 - s0p0; + T4f v1 = s1p1 - s1p0; + T4f vd = v1 - v0; // dot is in the range -1 to 1, scale and bias to 0 to 1 curDot = curDot * gSimd4fHalf + gSimd4fHalf; // interpolate velocity at contact points - Simd4f vx = splat<0>(v0) + curDot * splat<0>(vd); - Simd4f vy = splat<1>(v0) + curDot * splat<1>(vd); - Simd4f vz = splat<2>(v0) + curDot * splat<2>(vd); + T4f vx = splat<0>(v0) + curDot * splat<0>(vd); + T4f vy = splat<1>(v0) + curDot * splat<1>(vd); + T4f vz = splat<2>(v0) + curDot * splat<2>(vd); accum.addVelocity(vx, vy, vz, contactMask); } @@ -1158,39 +1158,39 @@ cloth::SwCollision<Simd4f>::collideCones(const Simd4f* __restrict prevPos, Simd4 namespace { -template <typename Simd4f> -PX_INLINE void calculateFrictionImpulse(const Simd4f& deltaX, const Simd4f& deltaY, const Simd4f& deltaZ, - const Simd4f& velX, const Simd4f& velY, const Simd4f& velZ, - const Simd4f* curPos, const Simd4f* prevPos, const Simd4f& scale, - const Simd4f& coefficient, const Simd4f& mask, Simd4f* impulse) +template <typename T4f> +PX_INLINE void calculateFrictionImpulse(const T4f& deltaX, const T4f& deltaY, const T4f& deltaZ, + const T4f& velX, const T4f& velY, const T4f& velZ, + const T4f* curPos, const T4f* prevPos, const T4f& scale, + const T4f& coefficient, const T4f& mask, T4f* impulse) { // calculate collision normal - Simd4f deltaSq = deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; + T4f deltaSq = deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; - Simd4f rcpDelta = rsqrt(deltaSq + gSimd4fEpsilon); + T4f rcpDelta = rsqrt(deltaSq + gSimd4fEpsilon); - Simd4f nx = deltaX * rcpDelta; - Simd4f ny = deltaY * rcpDelta; - Simd4f nz = deltaZ * rcpDelta; + T4f nx = deltaX * rcpDelta; + T4f ny = deltaY * rcpDelta; + T4f nz = deltaZ * rcpDelta; // calculate relative velocity scaled by number of collisions - Simd4f rvx = curPos[0] - prevPos[0] - velX * scale; - Simd4f rvy = curPos[1] - prevPos[1] - velY * scale; - Simd4f rvz = curPos[2] - prevPos[2] - velZ * scale; + T4f rvx = curPos[0] - prevPos[0] - velX * scale; + T4f rvy = curPos[1] - prevPos[1] - velY * scale; + T4f rvz = curPos[2] - prevPos[2] - velZ * scale; // calculate magnitude of relative normal velocity - Simd4f rvn = rvx * nx + rvy * ny + rvz * nz; + T4f rvn = rvx * nx + rvy * ny + rvz * nz; // calculate relative tangential velocity - Simd4f rvtx = rvx - rvn * nx; - Simd4f rvty = rvy - rvn * ny; - Simd4f rvtz = rvz - rvn * nz; + T4f rvtx = rvx - rvn * nx; + T4f rvty = rvy - rvn * ny; + T4f rvtz = rvz - rvn * nz; // calculate magnitude of vt - Simd4f rcpVt = rsqrt(rvtx * rvtx + rvty * rvty + rvtz * rvtz + gSimd4fEpsilon); + T4f rcpVt = rsqrt(rvtx * rvtx + rvty * rvty + rvtz * rvtz + gSimd4fEpsilon); // magnitude of friction impulse (cannot be greater than -vt) - Simd4f j = max(-coefficient * deltaSq * rcpDelta * rcpVt, gSimd4fMinusOne) & mask; + T4f j = max(-coefficient * deltaSq * rcpDelta * rcpVt, gSimd4fMinusOne) & mask; impulse[0] = rvtx * j; impulse[1] = rvty * j; @@ -1199,17 +1199,17 @@ PX_INLINE void calculateFrictionImpulse(const Simd4f& deltaX, const Simd4f& delt } // anonymous namespace -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::collideParticles() +template <typename T4f> +void cloth::SwCollision<T4f>::collideParticles() { const bool massScalingEnabled = mClothData.mCollisionMassScale > 0.0f; - const Simd4f massScale = simd4f(mClothData.mCollisionMassScale); + const T4f massScale = simd4f(mClothData.mCollisionMassScale); const bool frictionEnabled = mClothData.mFrictionScale > 0.0f; - const Simd4f frictionScale = simd4f(mClothData.mFrictionScale); + const T4f frictionScale = simd4f(mClothData.mFrictionScale); - Simd4f curPos[4]; - Simd4f prevPos[4]; + T4f curPos[4]; + T4f prevPos[4]; float* __restrict prevIt = mClothData.mPrevParticles; float* __restrict pIt = mClothData.mCurParticles; @@ -1223,14 +1223,14 @@ void cloth::SwCollision<Simd4f>::collideParticles() transpose(curPos[0], curPos[1], curPos[2], curPos[3]); ImpulseAccumulator accum; - Simd4i sphereMask = collideCones(curPos, accum); + T4i sphereMask = collideCones(curPos, accum); collideSpheres(sphereMask, curPos, accum); - Simd4f mask; + T4f mask; if (!anyGreater(accum.mNumCollisions, gSimd4fEpsilon, mask)) continue; - Simd4f invNumCollisions = recip(accum.mNumCollisions); + T4f invNumCollisions = recip(accum.mNumCollisions); if (frictionEnabled) { @@ -1240,7 +1240,7 @@ void cloth::SwCollision<Simd4f>::collideParticles() prevPos[3] = loadAligned(prevIt, 48); transpose(prevPos[0], prevPos[1], prevPos[2], prevPos[3]); - Simd4f frictionImpulse[3]; + T4f frictionImpulse[3]; calculateFrictionImpulse(accum.mDeltaX, accum.mDeltaY, accum.mDeltaZ, accum.mVelX, accum.mVelY, accum.mVelZ, curPos, prevPos, invNumCollisions, frictionScale, mask, frictionImpulse); @@ -1258,10 +1258,10 @@ void cloth::SwCollision<Simd4f>::collideParticles() if (massScalingEnabled) { // calculate the inverse mass scale based on the collision impulse magnitude - Simd4f dSq = invNumCollisions * invNumCollisions * + T4f dSq = invNumCollisions * invNumCollisions * (accum.mDeltaX * accum.mDeltaX + accum.mDeltaY * accum.mDeltaY + accum.mDeltaZ * accum.mDeltaZ); - Simd4f scale = recip(gSimd4fOne + massScale * dSq); + T4f scale = recip(gSimd4fOne + massScale * dSq); // scale invmass curPos[3] = select(mask, curPos[3] * scale, curPos[3]); @@ -1283,24 +1283,24 @@ void cloth::SwCollision<Simd4f>::collideParticles() } } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::collideVirtualParticles() +template <typename T4f> +void cloth::SwCollision<T4f>::collideVirtualParticles() { const bool massScalingEnabled = mClothData.mCollisionMassScale > 0.0f; - const Simd4f massScale = simd4f(mClothData.mCollisionMassScale); + const T4f massScale = simd4f(mClothData.mCollisionMassScale); const bool frictionEnabled = mClothData.mFrictionScale > 0.0f; - const Simd4f frictionScale = simd4f(mClothData.mFrictionScale); + const T4f frictionScale = simd4f(mClothData.mFrictionScale); - Simd4f curPos[3]; + T4f curPos[3]; const float* __restrict weights = mClothData.mVirtualParticleWeights; float* __restrict particles = mClothData.mCurParticles; float* __restrict prevParticles = mClothData.mPrevParticles; // move dummy particles outside of collision range - Simd4f* __restrict dummy = mClothData.mNumParticles + reinterpret_cast<Simd4f*>(mClothData.mCurParticles); - Simd4f invGridScale = recip(mGridScale) & (mGridScale > gSimd4fEpsilon); + T4f* __restrict dummy = mClothData.mNumParticles + reinterpret_cast<T4f*>(mClothData.mCurParticles); + T4f invGridScale = recip(mGridScale) & (mGridScale > gSimd4fEpsilon); dummy[0] = dummy[1] = dummy[2] = invGridScale * mGridBias - invGridScale; const uint16_t* __restrict vpIt = mClothData.mVirtualParticlesBegin; @@ -1308,31 +1308,31 @@ void cloth::SwCollision<Simd4f>::collideVirtualParticles() for (; vpIt != vpEnd; vpIt += 16) { // load 12 particles and 4 weights - Simd4f p0v0 = loadAligned(particles, vpIt[0] * sizeof(PxVec4)); - Simd4f p0v1 = loadAligned(particles, vpIt[1] * sizeof(PxVec4)); - Simd4f p0v2 = loadAligned(particles, vpIt[2] * sizeof(PxVec4)); - Simd4f w0 = loadAligned(weights, vpIt[3] * sizeof(PxVec4)); - - Simd4f p1v0 = loadAligned(particles, vpIt[4] * sizeof(PxVec4)); - Simd4f p1v1 = loadAligned(particles, vpIt[5] * sizeof(PxVec4)); - Simd4f p1v2 = loadAligned(particles, vpIt[6] * sizeof(PxVec4)); - Simd4f w1 = loadAligned(weights, vpIt[7] * sizeof(PxVec4)); - - Simd4f p2v0 = loadAligned(particles, vpIt[8] * sizeof(PxVec4)); - Simd4f p2v1 = loadAligned(particles, vpIt[9] * sizeof(PxVec4)); - Simd4f p2v2 = loadAligned(particles, vpIt[10] * sizeof(PxVec4)); - Simd4f w2 = loadAligned(weights, vpIt[11] * sizeof(PxVec4)); - - Simd4f p3v1 = loadAligned(particles, vpIt[13] * sizeof(PxVec4)); - Simd4f p3v0 = loadAligned(particles, vpIt[12] * sizeof(PxVec4)); - Simd4f p3v2 = loadAligned(particles, vpIt[14] * sizeof(PxVec4)); - Simd4f w3 = loadAligned(weights, vpIt[15] * sizeof(PxVec4)); + T4f p0v0 = loadAligned(particles, vpIt[0] * sizeof(PxVec4)); + T4f p0v1 = loadAligned(particles, vpIt[1] * sizeof(PxVec4)); + T4f p0v2 = loadAligned(particles, vpIt[2] * sizeof(PxVec4)); + T4f w0 = loadAligned(weights, vpIt[3] * sizeof(PxVec4)); + + T4f p1v0 = loadAligned(particles, vpIt[4] * sizeof(PxVec4)); + T4f p1v1 = loadAligned(particles, vpIt[5] * sizeof(PxVec4)); + T4f p1v2 = loadAligned(particles, vpIt[6] * sizeof(PxVec4)); + T4f w1 = loadAligned(weights, vpIt[7] * sizeof(PxVec4)); + + T4f p2v0 = loadAligned(particles, vpIt[8] * sizeof(PxVec4)); + T4f p2v1 = loadAligned(particles, vpIt[9] * sizeof(PxVec4)); + T4f p2v2 = loadAligned(particles, vpIt[10] * sizeof(PxVec4)); + T4f w2 = loadAligned(weights, vpIt[11] * sizeof(PxVec4)); + + T4f p3v1 = loadAligned(particles, vpIt[13] * sizeof(PxVec4)); + T4f p3v0 = loadAligned(particles, vpIt[12] * sizeof(PxVec4)); + T4f p3v2 = loadAligned(particles, vpIt[14] * sizeof(PxVec4)); + T4f w3 = loadAligned(weights, vpIt[15] * sizeof(PxVec4)); // interpolate particles and transpose - Simd4f px = p0v0 * splat<0>(w0) + p0v1 * splat<1>(w0) + p0v2 * splat<2>(w0); - Simd4f py = p1v0 * splat<0>(w1) + p1v1 * splat<1>(w1) + p1v2 * splat<2>(w1); - Simd4f pz = p2v0 * splat<0>(w2) + p2v1 * splat<1>(w2) + p2v2 * splat<2>(w2); - Simd4f pw = p3v0 * splat<0>(w3) + p3v1 * splat<1>(w3) + p3v2 * splat<2>(w3); + T4f px = p0v0 * splat<0>(w0) + p0v1 * splat<1>(w0) + p0v2 * splat<2>(w0); + T4f py = p1v0 * splat<0>(w1) + p1v1 * splat<1>(w1) + p1v2 * splat<2>(w1); + T4f pz = p2v0 * splat<0>(w2) + p2v1 * splat<1>(w2) + p2v2 * splat<2>(w2); + T4f pw = p3v0 * splat<0>(w3) + p3v1 * splat<1>(w3) + p3v2 * splat<2>(w3); transpose(px, py, pz, pw); curPos[0] = px; @@ -1340,55 +1340,55 @@ void cloth::SwCollision<Simd4f>::collideVirtualParticles() curPos[2] = pz; ImpulseAccumulator accum; - Simd4i sphereMask = collideCones(curPos, accum); + T4i sphereMask = collideCones(curPos, accum); collideSpheres(sphereMask, curPos, accum); - Simd4f mask; + T4f mask; if (!anyGreater(accum.mNumCollisions, gSimd4fEpsilon, mask)) continue; - Simd4f invNumCollisions = recip(accum.mNumCollisions); + T4f invNumCollisions = recip(accum.mNumCollisions); // displacement and transpose back - Simd4f d0 = accum.mDeltaX * invNumCollisions; - Simd4f d1 = accum.mDeltaY * invNumCollisions; - Simd4f d2 = accum.mDeltaZ * invNumCollisions; - Simd4f d3 = gSimd4fZero; + T4f d0 = accum.mDeltaX * invNumCollisions; + T4f d1 = accum.mDeltaY * invNumCollisions; + T4f d2 = accum.mDeltaZ * invNumCollisions; + T4f d3 = gSimd4fZero; transpose(d0, d1, d2, d3); // scale weights by 1/dot(w,w) - Simd4f rw0 = w0 * splat<3>(w0); - Simd4f rw1 = w1 * splat<3>(w1); - Simd4f rw2 = w2 * splat<3>(w2); - Simd4f rw3 = w3 * splat<3>(w3); + T4f rw0 = w0 * splat<3>(w0); + T4f rw1 = w1 * splat<3>(w1); + T4f rw2 = w2 * splat<3>(w2); + T4f rw3 = w3 * splat<3>(w3); if (frictionEnabled) { - Simd4f q0v0 = loadAligned(prevParticles, vpIt[0] * sizeof(PxVec4)); - Simd4f q0v1 = loadAligned(prevParticles, vpIt[1] * sizeof(PxVec4)); - Simd4f q0v2 = loadAligned(prevParticles, vpIt[2] * sizeof(PxVec4)); + T4f q0v0 = loadAligned(prevParticles, vpIt[0] * sizeof(PxVec4)); + T4f q0v1 = loadAligned(prevParticles, vpIt[1] * sizeof(PxVec4)); + T4f q0v2 = loadAligned(prevParticles, vpIt[2] * sizeof(PxVec4)); - Simd4f q1v0 = loadAligned(prevParticles, vpIt[4] * sizeof(PxVec4)); - Simd4f q1v1 = loadAligned(prevParticles, vpIt[5] * sizeof(PxVec4)); - Simd4f q1v2 = loadAligned(prevParticles, vpIt[6] * sizeof(PxVec4)); + T4f q1v0 = loadAligned(prevParticles, vpIt[4] * sizeof(PxVec4)); + T4f q1v1 = loadAligned(prevParticles, vpIt[5] * sizeof(PxVec4)); + T4f q1v2 = loadAligned(prevParticles, vpIt[6] * sizeof(PxVec4)); - Simd4f q2v0 = loadAligned(prevParticles, vpIt[8] * sizeof(PxVec4)); - Simd4f q2v1 = loadAligned(prevParticles, vpIt[9] * sizeof(PxVec4)); - Simd4f q2v2 = loadAligned(prevParticles, vpIt[10] * sizeof(PxVec4)); + T4f q2v0 = loadAligned(prevParticles, vpIt[8] * sizeof(PxVec4)); + T4f q2v1 = loadAligned(prevParticles, vpIt[9] * sizeof(PxVec4)); + T4f q2v2 = loadAligned(prevParticles, vpIt[10] * sizeof(PxVec4)); - Simd4f q3v0 = loadAligned(prevParticles, vpIt[12] * sizeof(PxVec4)); - Simd4f q3v1 = loadAligned(prevParticles, vpIt[13] * sizeof(PxVec4)); - Simd4f q3v2 = loadAligned(prevParticles, vpIt[14] * sizeof(PxVec4)); + T4f q3v0 = loadAligned(prevParticles, vpIt[12] * sizeof(PxVec4)); + T4f q3v1 = loadAligned(prevParticles, vpIt[13] * sizeof(PxVec4)); + T4f q3v2 = loadAligned(prevParticles, vpIt[14] * sizeof(PxVec4)); // calculate previous interpolated positions - Simd4f qx = q0v0 * splat<0>(w0) + q0v1 * splat<1>(w0) + q0v2 * splat<2>(w0); - Simd4f qy = q1v0 * splat<0>(w1) + q1v1 * splat<1>(w1) + q1v2 * splat<2>(w1); - Simd4f qz = q2v0 * splat<0>(w2) + q2v1 * splat<1>(w2) + q2v2 * splat<2>(w2); - Simd4f qw = q3v0 * splat<0>(w3) + q3v1 * splat<1>(w3) + q3v2 * splat<2>(w3); + T4f qx = q0v0 * splat<0>(w0) + q0v1 * splat<1>(w0) + q0v2 * splat<2>(w0); + T4f qy = q1v0 * splat<0>(w1) + q1v1 * splat<1>(w1) + q1v2 * splat<2>(w1); + T4f qz = q2v0 * splat<0>(w2) + q2v1 * splat<1>(w2) + q2v2 * splat<2>(w2); + T4f qw = q3v0 * splat<0>(w3) + q3v1 * splat<1>(w3) + q3v2 * splat<2>(w3); transpose(qx, qy, qz, qw); - Simd4f prevPos[3] = { qx, qy, qz }; - Simd4f frictionImpulse[4]; + T4f prevPos[3] = { qx, qy, qz }; + T4f frictionImpulse[4]; frictionImpulse[3] = gSimd4fZero; calculateFrictionImpulse(accum.mDeltaX, accum.mDeltaY, accum.mDeltaZ, accum.mVelX, accum.mVelY, accum.mVelZ, @@ -1433,16 +1433,16 @@ void cloth::SwCollision<Simd4f>::collideVirtualParticles() if (massScalingEnabled) { // calculate the inverse mass scale based on the collision impulse - Simd4f dSq = invNumCollisions * invNumCollisions * + T4f dSq = invNumCollisions * invNumCollisions * (accum.mDeltaX * accum.mDeltaX + accum.mDeltaY * accum.mDeltaY + accum.mDeltaZ * accum.mDeltaZ); - Simd4f weightScale = recip(gSimd4fOne + massScale * dSq); + T4f weightScale = recip(gSimd4fOne + massScale * dSq); weightScale = weightScale - gSimd4fOne; - Simd4f s0 = gSimd4fOne + splat<0>(weightScale) * (w0 & splat<0>(mask)); - Simd4f s1 = gSimd4fOne + splat<1>(weightScale) * (w1 & splat<1>(mask)); - Simd4f s2 = gSimd4fOne + splat<2>(weightScale) * (w2 & splat<2>(mask)); - Simd4f s3 = gSimd4fOne + splat<3>(weightScale) * (w3 & splat<3>(mask)); + T4f s0 = gSimd4fOne + splat<0>(weightScale) * (w0 & splat<0>(mask)); + T4f s1 = gSimd4fOne + splat<1>(weightScale) * (w1 & splat<1>(mask)); + T4f s2 = gSimd4fOne + splat<2>(weightScale) * (w2 & splat<2>(mask)); + T4f s3 = gSimd4fOne + splat<3>(weightScale) * (w3 & splat<3>(mask)); p0v0 = p0v0 * (gSimd4fOneXYZ | (splat<0>(s0) & sMaskW)); p0v1 = p0v1 * (gSimd4fOneXYZ | (splat<1>(s0) & sMaskW)); @@ -1500,17 +1500,17 @@ void cloth::SwCollision<Simd4f>::collideVirtualParticles() } } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::collideContinuousParticles() +template <typename T4f> +void cloth::SwCollision<T4f>::collideContinuousParticles() { - Simd4f curPos[4]; - Simd4f prevPos[4]; + T4f curPos[4]; + T4f prevPos[4]; const bool massScalingEnabled = mClothData.mCollisionMassScale > 0.0f; - const Simd4f massScale = simd4f(mClothData.mCollisionMassScale); + const T4f massScale = simd4f(mClothData.mCollisionMassScale); const bool frictionEnabled = mClothData.mFrictionScale > 0.0f; - const Simd4f frictionScale = simd4f(mClothData.mFrictionScale); + const T4f frictionScale = simd4f(mClothData.mFrictionScale); float* __restrict prevIt = mClothData.mPrevParticles; float* __restrict curIt = mClothData.mCurParticles; @@ -1531,18 +1531,18 @@ void cloth::SwCollision<Simd4f>::collideContinuousParticles() transpose(curPos[0], curPos[1], curPos[2], curPos[3]); ImpulseAccumulator accum; - Simd4i sphereMask = collideCones(prevPos, curPos, accum); + T4i sphereMask = collideCones(prevPos, curPos, accum); collideSpheres(sphereMask, prevPos, curPos, accum); - Simd4f mask; + T4f mask; if (!anyGreater(accum.mNumCollisions, gSimd4fEpsilon, mask)) continue; - Simd4f invNumCollisions = recip(accum.mNumCollisions); + T4f invNumCollisions = recip(accum.mNumCollisions); if (frictionEnabled) { - Simd4f frictionImpulse[3]; + T4f frictionImpulse[3]; calculateFrictionImpulse(accum.mDeltaX, accum.mDeltaY, accum.mDeltaZ, accum.mVelX, accum.mVelY, accum.mVelZ, curPos, prevPos, invNumCollisions, frictionScale, mask, frictionImpulse); @@ -1560,10 +1560,10 @@ void cloth::SwCollision<Simd4f>::collideContinuousParticles() if (massScalingEnabled) { // calculate the inverse mass scale based on the collision impulse magnitude - Simd4f dSq = invNumCollisions * invNumCollisions * + T4f dSq = invNumCollisions * invNumCollisions * (accum.mDeltaX * accum.mDeltaX + accum.mDeltaY * accum.mDeltaY + accum.mDeltaZ * accum.mDeltaZ); - Simd4f weightScale = recip(gSimd4fOne + massScale * dSq); + T4f weightScale = recip(gSimd4fOne + massScale * dSq); // scale invmass curPos[3] = select(mask, curPos[3] * weightScale, curPos[3]); @@ -1585,22 +1585,22 @@ void cloth::SwCollision<Simd4f>::collideContinuousParticles() } } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::collideConvexes(const IterationState<Simd4f>& state) +template <typename T4f> +void cloth::SwCollision<T4f>::collideConvexes(const IterationState<T4f>& state) { if (!mClothData.mNumConvexes) return; // times 2 for plane equation result buffer - Simd4f* planes = static_cast<Simd4f*>(mAllocator.allocate(sizeof(Simd4f) * mClothData.mNumPlanes * 2)); + T4f* planes = static_cast<T4f*>(mAllocator.allocate(sizeof(T4f) * mClothData.mNumPlanes * 2)); - const Simd4f* targetPlanes = reinterpret_cast<const Simd4f*>(mClothData.mTargetCollisionPlanes); + const T4f* targetPlanes = reinterpret_cast<const T4f*>(mClothData.mTargetCollisionPlanes); // generate plane collision data if (state.mRemainingIterations != 1) { // interpolate planes - LerpIterator<Simd4f, const Simd4f*> planeIter(reinterpret_cast<const Simd4f*>(mClothData.mStartCollisionPlanes), + LerpIterator<T4f, const T4f*> planeIter(reinterpret_cast<const T4f*>(mClothData.mStartCollisionPlanes), targetPlanes, state.getCurrentAlpha()); // todo: normalize plane equations @@ -1612,10 +1612,10 @@ void cloth::SwCollision<Simd4f>::collideConvexes(const IterationState<Simd4f>& s generatePlanes(planes, targetPlanes, mClothData.mNumPlanes); } - Simd4f curPos[4], prevPos[4]; + T4f curPos[4], prevPos[4]; const bool frictionEnabled = mClothData.mFrictionScale > 0.0f; - const Simd4f frictionScale = simd4f(mClothData.mFrictionScale); + const T4f frictionScale = simd4f(mClothData.mFrictionScale); float* __restrict curIt = mClothData.mCurParticles; float* __restrict curEnd = curIt + mClothData.mNumParticles * 4; @@ -1631,11 +1631,11 @@ void cloth::SwCollision<Simd4f>::collideConvexes(const IterationState<Simd4f>& s ImpulseAccumulator accum; collideConvexes(planes, curPos, accum); - Simd4f mask; + T4f mask; if (!anyGreater(accum.mNumCollisions, gSimd4fEpsilon, mask)) continue; - Simd4f invNumCollisions = recip(accum.mNumCollisions); + T4f invNumCollisions = recip(accum.mNumCollisions); if (frictionEnabled) { @@ -1645,7 +1645,7 @@ void cloth::SwCollision<Simd4f>::collideConvexes(const IterationState<Simd4f>& s prevPos[3] = loadAligned(prevIt, 48); transpose(prevPos[0], prevPos[1], prevPos[2], prevPos[3]); - Simd4f frictionImpulse[3]; + T4f frictionImpulse[3]; calculateFrictionImpulse(accum.mDeltaX, accum.mDeltaY, accum.mDeltaZ, accum.mVelX, accum.mVelY, accum.mVelZ, curPos, prevPos, invNumCollisions, frictionScale, mask, frictionImpulse); @@ -1678,20 +1678,20 @@ void cloth::SwCollision<Simd4f>::collideConvexes(const IterationState<Simd4f>& s mAllocator.deallocate(planes); } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::collideConvexes(const Simd4f* __restrict planes, Simd4f* __restrict curPos, +template <typename T4f> +void cloth::SwCollision<T4f>::collideConvexes(const T4f* __restrict planes, T4f* __restrict curPos, ImpulseAccumulator& accum) { - Simd4i result = gSimd4iZero; - Simd4i mask4 = gSimd4iOne; + T4i result = gSimd4iZero; + T4i mask4 = gSimd4iOne; - const Simd4f* __restrict pIt, *pEnd = planes + mClothData.mNumPlanes; - Simd4f* __restrict dIt = const_cast<Simd4f*>(pEnd); + const T4f* __restrict pIt, *pEnd = planes + mClothData.mNumPlanes; + T4f* __restrict dIt = const_cast<T4f*>(pEnd); for (pIt = planes; pIt != pEnd; ++pIt, ++dIt) { *dIt = splat<3>(*pIt) + curPos[2] * splat<2>(*pIt) + curPos[1] * splat<1>(*pIt) + curPos[0] * splat<0>(*pIt); result = result | (mask4 & simd4i(*dIt < gSimd4fZero)); - mask4 = mask4 << 1; // todo: shift by Simd4i on consoles + mask4 = mask4 << 1; // todo: shift by T4i on consoles } if (allEqual(result, gSimd4iZero)) @@ -1708,18 +1708,18 @@ void cloth::SwCollision<Simd4f>::collideConvexes(const Simd4f* __restrict planes uint32_t test = mask - 1; uint32_t planeIndex = findBitSet(mask & ~test); - Simd4f plane = planes[planeIndex]; - Simd4f planeX = splat<0>(plane); - Simd4f planeY = splat<1>(plane); - Simd4f planeZ = splat<2>(plane); - Simd4f planeD = pEnd[planeIndex]; + T4f plane = planes[planeIndex]; + T4f planeX = splat<0>(plane); + T4f planeY = splat<1>(plane); + T4f planeZ = splat<2>(plane); + T4f planeD = pEnd[planeIndex]; while (mask &= test) { test = mask - 1; planeIndex = findBitSet(mask & ~test); plane = planes[planeIndex]; - Simd4f dist = pEnd[planeIndex]; - Simd4f closer = dist > planeD; + T4f dist = pEnd[planeIndex]; + T4f closer = dist > planeD; planeX = select(closer, splat<0>(plane), planeX); planeY = select(closer, splat<1>(plane), planeY); planeZ = select(closer, splat<2>(plane), planeZ); @@ -1730,8 +1730,8 @@ void cloth::SwCollision<Simd4f>::collideConvexes(const Simd4f* __restrict planes } } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::collideTriangles(const IterationState<Simd4f>& state) +template <typename T4f> +void cloth::SwCollision<T4f>::collideTriangles(const IterationState<T4f>& state) { if (!mClothData.mNumCollisionTriangles) return; @@ -1739,24 +1739,24 @@ void cloth::SwCollision<Simd4f>::collideTriangles(const IterationState<Simd4f>& TriangleData* triangles = static_cast<TriangleData*>(mAllocator.allocate(sizeof(TriangleData) * mClothData.mNumCollisionTriangles)); - UnalignedIterator<Simd4f, 3> targetTriangles(mClothData.mTargetCollisionTriangles); + UnalignedIterator<T4f, 3> targetTriangles(mClothData.mTargetCollisionTriangles); // generate triangle collision data if (state.mRemainingIterations != 1) { // interpolate triangles - LerpIterator<Simd4f, UnalignedIterator<Simd4f, 3> > triangleIter(mClothData.mStartCollisionTriangles, + LerpIterator<T4f, UnalignedIterator<T4f, 3> > triangleIter(mClothData.mStartCollisionTriangles, targetTriangles, state.getCurrentAlpha()); - generateTriangles<Simd4f>(triangles, triangleIter, mClothData.mNumCollisionTriangles); + generateTriangles<T4f>(triangles, triangleIter, mClothData.mNumCollisionTriangles); } else { // otherwise use the target triangles directly - generateTriangles<Simd4f>(triangles, targetTriangles, mClothData.mNumCollisionTriangles); + generateTriangles<T4f>(triangles, targetTriangles, mClothData.mNumCollisionTriangles); } - Simd4f positions[4]; + T4f positions[4]; float* __restrict pIt = mClothData.mCurParticles; float* __restrict pEnd = pIt + mClothData.mNumParticles * 4; @@ -1771,11 +1771,11 @@ void cloth::SwCollision<Simd4f>::collideTriangles(const IterationState<Simd4f>& ImpulseAccumulator accum; collideTriangles(triangles, positions, accum); - Simd4f mask; + T4f mask; if (!anyGreater(accum.mNumCollisions, gSimd4fEpsilon, mask)) continue; - Simd4f invNumCollisions = recip(accum.mNumCollisions); + T4f invNumCollisions = recip(accum.mNumCollisions); positions[0] = positions[0] + accum.mDeltaX * invNumCollisions; positions[1] = positions[1] + accum.mDeltaY * invNumCollisions; @@ -1795,60 +1795,60 @@ void cloth::SwCollision<Simd4f>::collideTriangles(const IterationState<Simd4f>& mAllocator.deallocate(triangles); } -template <typename Simd4f> -void cloth::SwCollision<Simd4f>::collideTriangles(const TriangleData* __restrict triangles, Simd4f* __restrict curPos, +template <typename T4f> +void cloth::SwCollision<T4f>::collideTriangles(const TriangleData* __restrict triangles, T4f* __restrict curPos, ImpulseAccumulator& accum) { - Simd4f normalX, normalY, normalZ, normalD; + T4f normalX, normalY, normalZ, normalD; normalX = normalY = normalZ = normalD = gSimd4fZero; - Simd4f minSqrLength = gSimd4fFloatMax; + T4f minSqrLength = gSimd4fFloatMax; const TriangleData* __restrict tIt, *tEnd = triangles + mClothData.mNumCollisionTriangles; for (tIt = triangles; tIt != tEnd; ++tIt) { - Simd4f base = loadAligned(&tIt->base.x); - Simd4f edge0 = loadAligned(&tIt->edge0.x); - Simd4f edge1 = loadAligned(&tIt->edge1.x); - Simd4f normal = loadAligned(&tIt->normal.x); - Simd4f aux = loadAligned(&tIt->det); + T4f base = loadAligned(&tIt->base.x); + T4f edge0 = loadAligned(&tIt->edge0.x); + T4f edge1 = loadAligned(&tIt->edge1.x); + T4f normal = loadAligned(&tIt->normal.x); + T4f aux = loadAligned(&tIt->det); - Simd4f dx = curPos[0] - splat<0>(base); - Simd4f dy = curPos[1] - splat<1>(base); - Simd4f dz = curPos[2] - splat<2>(base); + T4f dx = curPos[0] - splat<0>(base); + T4f dy = curPos[1] - splat<1>(base); + T4f dz = curPos[2] - splat<2>(base); - Simd4f e0x = splat<0>(edge0); - Simd4f e0y = splat<1>(edge0); - Simd4f e0z = splat<2>(edge0); + T4f e0x = splat<0>(edge0); + T4f e0y = splat<1>(edge0); + T4f e0z = splat<2>(edge0); - Simd4f e1x = splat<0>(edge1); - Simd4f e1y = splat<1>(edge1); - Simd4f e1z = splat<2>(edge1); + T4f e1x = splat<0>(edge1); + T4f e1y = splat<1>(edge1); + T4f e1z = splat<2>(edge1); - Simd4f nx = splat<0>(normal); - Simd4f ny = splat<1>(normal); - Simd4f nz = splat<2>(normal); + T4f nx = splat<0>(normal); + T4f ny = splat<1>(normal); + T4f nz = splat<2>(normal); - Simd4f deltaDotEdge0 = dx * e0x + dy * e0y + dz * e0z; - Simd4f deltaDotEdge1 = dx * e1x + dy * e1y + dz * e1z; - Simd4f deltaDotNormal = dx * nx + dy * ny + dz * nz; + T4f deltaDotEdge0 = dx * e0x + dy * e0y + dz * e0z; + T4f deltaDotEdge1 = dx * e1x + dy * e1y + dz * e1z; + T4f deltaDotNormal = dx * nx + dy * ny + dz * nz; - Simd4f edge0DotEdge1 = splat<3>(base); - Simd4f edge0SqrLength = splat<3>(edge0); - Simd4f edge1SqrLength = splat<3>(edge1); + T4f edge0DotEdge1 = splat<3>(base); + T4f edge0SqrLength = splat<3>(edge0); + T4f edge1SqrLength = splat<3>(edge1); - Simd4f s = edge1SqrLength * deltaDotEdge0 - edge0DotEdge1 * deltaDotEdge1; - Simd4f t = edge0SqrLength * deltaDotEdge1 - edge0DotEdge1 * deltaDotEdge0; + T4f s = edge1SqrLength * deltaDotEdge0 - edge0DotEdge1 * deltaDotEdge1; + T4f t = edge0SqrLength * deltaDotEdge1 - edge0DotEdge1 * deltaDotEdge0; - Simd4f sPositive = s > gSimd4fZero; - Simd4f tPositive = t > gSimd4fZero; + T4f sPositive = s > gSimd4fZero; + T4f tPositive = t > gSimd4fZero; - Simd4f det = splat<0>(aux); + T4f det = splat<0>(aux); s = select(tPositive, s * det, deltaDotEdge0 * splat<2>(aux)); t = select(sPositive, t * det, deltaDotEdge1 * splat<3>(aux)); - Simd4f clamp = gSimd4fOne < s + t; - Simd4f numerator = edge1SqrLength - edge0DotEdge1 + deltaDotEdge0 - deltaDotEdge1; + T4f clamp = gSimd4fOne < s + t; + T4f numerator = edge1SqrLength - edge0DotEdge1 + deltaDotEdge0 - deltaDotEdge1; s = select(clamp, numerator * splat<1>(aux), s); @@ -1859,13 +1859,13 @@ void cloth::SwCollision<Simd4f>::collideTriangles(const TriangleData* __restrict dy = dy - e0y * s - e1y * t; dz = dz - e0z * s - e1z * t; - Simd4f sqrLength = dx * dx + dy * dy + dz * dz; + T4f sqrLength = dx * dx + dy * dy + dz * dz; // slightly increase distance for colliding triangles - Simd4f slack = (gSimd4fZero > deltaDotNormal) & simd4f(1e-4f); + T4f slack = (gSimd4fZero > deltaDotNormal) & simd4f(1e-4f); sqrLength = sqrLength + sqrLength * slack; - Simd4f mask = sqrLength < minSqrLength; + T4f mask = sqrLength < minSqrLength; normalX = select(mask, nx, normalX); normalY = select(mask, ny, normalY); @@ -1875,7 +1875,7 @@ void cloth::SwCollision<Simd4f>::collideTriangles(const TriangleData* __restrict minSqrLength = min(sqrLength, minSqrLength); } - Simd4f mask; + T4f mask; if (!anyGreater(gSimd4fZero, normalD, mask)) return; diff --git a/NvCloth/src/SwCollision.h b/NvCloth/src/SwCollision.h index 8d5746c..5806b2e 100644 --- a/NvCloth/src/SwCollision.h +++ b/NvCloth/src/SwCollision.h @@ -52,16 +52,16 @@ typedef StackAllocator<16> SwKernelAllocator; /** Collision handler for SwSolver. */ -template <typename Simd4f> +template <typename T4f> class SwCollision { - typedef typename Simd4fToSimd4i<Simd4f>::Type Simd4i; + typedef typename Simd4fToSimd4i<T4f>::Type T4i; public: struct ShapeMask { - Simd4i mCones; - Simd4i mSpheres; + T4i mCones; + T4i mSpheres; ShapeMask& operator = (const ShapeMask&); ShapeMask& operator &= (const ShapeMask&); @@ -80,7 +80,7 @@ class SwCollision SwCollision(SwClothData& clothData, SwKernelAllocator& alloc); ~SwCollision(); - void operator()(const IterationState<Simd4f>& state); + void operator()(const IterationState<T4f>& state); static size_t estimateTemporaryMemory(const SwCloth& cloth); static size_t estimatePersistentMemory(const SwCloth& cloth); @@ -97,32 +97,32 @@ class SwCollision static void mergeAcceleration(uint32_t*); bool buildAcceleration(); - static ShapeMask getShapeMask(const Simd4f&, const Simd4i*, const Simd4i*); - ShapeMask getShapeMask(const Simd4f*) const; - ShapeMask getShapeMask(const Simd4f*, const Simd4f*) const; + static ShapeMask getShapeMask(const T4f&, const T4i*, const T4i*); + ShapeMask getShapeMask(const T4f*) const; + ShapeMask getShapeMask(const T4f*, const T4f*) const; - void collideSpheres(const Simd4i&, const Simd4f*, ImpulseAccumulator&) const; - Simd4i collideCones(const Simd4f*, ImpulseAccumulator&) const; + void collideSpheres(const T4i&, const T4f*, ImpulseAccumulator&) const; + T4i collideCones(const T4f*, ImpulseAccumulator&) const; - void collideSpheres(const Simd4i&, const Simd4f*, Simd4f*, ImpulseAccumulator&) const; - Simd4i collideCones(const Simd4f*, Simd4f*, ImpulseAccumulator&) const; + void collideSpheres(const T4i&, const T4f*, T4f*, ImpulseAccumulator&) const; + T4i collideCones(const T4f*, T4f*, ImpulseAccumulator&) const; void collideParticles(); void collideVirtualParticles(); void collideContinuousParticles(); - void collideConvexes(const IterationState<Simd4f>&); - void collideConvexes(const Simd4f*, Simd4f*, ImpulseAccumulator&); + void collideConvexes(const IterationState<T4f>&); + void collideConvexes(const T4f*, T4f*, ImpulseAccumulator&); - void collideTriangles(const IterationState<Simd4f>&); - void collideTriangles(const TriangleData*, Simd4f*, ImpulseAccumulator&); + void collideTriangles(const IterationState<T4f>&); + void collideTriangles(const TriangleData*, T4f*, ImpulseAccumulator&); public: // acceleration structure static const uint32_t sGridSize = 8; - Simd4i mSphereGrid[6 * sGridSize / 4]; - Simd4i mConeGrid[6 * sGridSize / 4]; - Simd4f mGridScale, mGridBias; + T4i mSphereGrid[6 * sGridSize / 4]; + T4i mConeGrid[6 * sGridSize / 4]; + T4f mGridScale, mGridBias; CollisionData mPrevData; CollisionData mCurData; @@ -132,8 +132,16 @@ class SwCollision uint32_t mNumCollisions; - static const Simd4f sSkeletonWidth; + static const T4f sSkeletonWidth; }; +//explicit template instantiation declaration +#if NV_SIMD_SIMD +extern template class SwCollision<Simd4f>; +#endif +#if NV_SIMD_SCALAR +extern template class SwCollision<Scalar4f>; +#endif + } // namespace cloth } // namespace nv diff --git a/NvCloth/src/SwFabric.cpp b/NvCloth/src/SwFabric.cpp index 6309c80..9830398 100644 --- a/NvCloth/src/SwFabric.cpp +++ b/NvCloth/src/SwFabric.cpp @@ -27,7 +27,6 @@ // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. // Copyright (c) 2001-2004 NovodeX AG. All rights reserved. -#include "foundation/PxAssert.h" #include "SwFabric.h" #include "SwFactory.h" #include "PsSort.h" diff --git a/NvCloth/src/SwFactory.cpp b/NvCloth/src/SwFactory.cpp index 418eb13..6f46c96 100644 --- a/NvCloth/src/SwFactory.cpp +++ b/NvCloth/src/SwFactory.cpp @@ -31,7 +31,6 @@ #include "SwFabric.h" #include "SwCloth.h" #include "SwSolver.h" -#include "ClothImpl.h" #include <string.h> // for memcpy using namespace nv; @@ -66,7 +65,7 @@ cloth::Fabric* cloth::SwFactory::createFabric(uint32_t numParticles, Range<const cloth::Cloth* cloth::SwFactory::createCloth(Range<const PxVec4> particles, Fabric& fabric) { - return NV_CLOTH_NEW(SwClothImpl)(*this, fabric, particles); + return NV_CLOTH_NEW(SwCloth)(*this, static_cast<SwFabric&>(fabric), particles); } cloth::Solver* cloth::SwFactory::createSolver() @@ -80,7 +79,7 @@ cloth::Cloth* cloth::SwFactory::clone(const Cloth& cloth) return cloth.clone(*this); // forward to CuCloth // copy construct - return NV_CLOTH_NEW(SwClothImpl)(*this, static_cast<const SwClothImpl&>(cloth)); + return NV_CLOTH_NEW(SwCloth)(*this, static_cast<const SwCloth&>(cloth)); } void cloth::SwFactory::extractFabricData(const Fabric& fabric, Range<uint32_t> phaseIndices, Range<uint32_t> sets, @@ -157,7 +156,7 @@ void cloth::SwFactory::extractCollisionData(const Cloth& cloth, Range<PxVec4> sp { NV_CLOTH_ASSERT(&cloth.getFactory() == this); - const SwCloth& swCloth = static_cast<const SwClothImpl&>(cloth).mCloth; + const SwCloth& swCloth = static_cast<const SwCloth&>(cloth); NV_CLOTH_ASSERT(spheres.empty() || spheres.size() == swCloth.mStartCollisionSpheres.size()); NV_CLOTH_ASSERT(capsules.empty() || capsules.size() == swCloth.mCapsuleIndices.size() * 2); @@ -188,7 +187,7 @@ void cloth::SwFactory::extractMotionConstraints(const Cloth& cloth, Range<PxVec4 { NV_CLOTH_ASSERT(&cloth.getFactory() == this); - const SwCloth& swCloth = static_cast<const SwClothImpl&>(cloth).mCloth; + const SwCloth& swCloth = static_cast<const SwCloth&>(cloth); Vector<PxVec4>::Type const& srcConstraints = !swCloth.mMotionConstraints.mTarget.empty() ? swCloth.mMotionConstraints.mTarget @@ -207,7 +206,7 @@ void cloth::SwFactory::extractSeparationConstraints(const Cloth& cloth, Range<Px { NV_CLOTH_ASSERT(&cloth.getFactory() == this); - const SwCloth& swCloth = static_cast<const SwClothImpl&>(cloth).mCloth; + const SwCloth& swCloth = static_cast<const SwCloth&>(cloth); Vector<PxVec4>::Type const& srcConstraints = !swCloth.mSeparationConstraints.mTarget.empty() ? swCloth.mSeparationConstraints.mTarget @@ -226,7 +225,7 @@ void cloth::SwFactory::extractParticleAccelerations(const Cloth& cloth, Range<Px { NV_CLOTH_ASSERT(&cloth.getFactory() == this); - const SwCloth& swCloth = static_cast<const SwClothImpl&>(cloth).mCloth; + const SwCloth& swCloth = static_cast<const SwCloth&>(cloth); if (!swCloth.mParticleAccelerations.empty()) { @@ -242,7 +241,7 @@ void cloth::SwFactory::extractVirtualParticles(const Cloth& cloth, Range<uint32_ { NV_CLOTH_ASSERT(this == &cloth.getFactory()); - const SwCloth& swCloth = static_cast<const SwClothImpl&>(cloth).mCloth; + const SwCloth& swCloth = static_cast<const SwCloth&>(cloth); uint32_t numIndices = cloth.getNumVirtualParticles(); uint32_t numWeights = cloth.getNumVirtualParticleWeights(); @@ -286,14 +285,14 @@ void cloth::SwFactory::extractVirtualParticles(const Cloth& cloth, Range<uint32_ void cloth::SwFactory::extractSelfCollisionIndices(const Cloth& cloth, Range<uint32_t> destIndices) const { - const SwCloth& swCloth = static_cast<const SwClothImpl&>(cloth).mCloth; + const SwCloth& swCloth = static_cast<const SwCloth&>(cloth); NV_CLOTH_ASSERT(destIndices.size() == swCloth.mSelfCollisionIndices.size()); memcpy(destIndices.begin(), swCloth.mSelfCollisionIndices.begin(), destIndices.size() * sizeof(uint32_t)); } void cloth::SwFactory::extractRestPositions(const Cloth& cloth, Range<PxVec4> destRestPositions) const { - const SwCloth& swCloth = static_cast<const SwClothImpl&>(cloth).mCloth; + const SwCloth& swCloth = static_cast<const SwCloth&>(cloth); NV_CLOTH_ASSERT(destRestPositions.size() == swCloth.mRestPositions.size()); memcpy(destRestPositions.begin(), swCloth.mRestPositions.begin(), destRestPositions.size() * sizeof(PxVec4)); } diff --git a/NvCloth/src/SwFactory.h b/NvCloth/src/SwFactory.h index e0caf87..4cbee0c 100644 --- a/NvCloth/src/SwFactory.h +++ b/NvCloth/src/SwFactory.h @@ -48,7 +48,7 @@ class SwFactory : public Factory { public: typedef SwFabric FabricType; - typedef ClothImpl<SwCloth> ImplType; + typedef SwCloth ClothType; SwFactory(); virtual ~SwFactory(); diff --git a/NvCloth/src/SwInterCollision.cpp b/NvCloth/src/SwInterCollision.cpp index 6d5e013..b9b494f 100644 --- a/NvCloth/src/SwInterCollision.cpp +++ b/NvCloth/src/SwInterCollision.cpp @@ -73,16 +73,16 @@ void radixSort(const uint32_t* first, const uint32_t* last, uint32_t* out) for (uint32_t i = 0; i < 256; ++i) { uint32_t temp0 = histograms[0][i] + sums[0]; - histograms[0][i] = sums[0], sums[0] = temp0; + histograms[0][i] = sums[0]; sums[0] = temp0; uint32_t temp1 = histograms[1][i] + sums[1]; - histograms[1][i] = sums[1], sums[1] = temp1; + histograms[1][i] = sums[1]; sums[1] = temp1; uint32_t temp2 = histograms[2][i] + sums[2]; - histograms[2][i] = sums[2], sums[2] = temp2; + histograms[2][i] = sums[2]; sums[2] = temp2; uint32_t temp3 = histograms[3][i] + sums[3]; - histograms[3][i] = sums[3], sums[3] = temp3; + histograms[3][i] = sums[3]; sums[3] = temp3; } NV_CLOTH_ASSERT(sums[0] == n && sums[1] == n && sums[2] == n && sums[3] == n); @@ -98,18 +98,27 @@ void radixSort(const uint32_t* first, const uint32_t* last, uint32_t* out) for (uint32_t i = 0; i != n; ++i) indices[1][histograms[0][0xff & first[i]]++] = i; - for (uint32_t i = 0, index; index = indices[1][i], i != n; ++i) + for (uint32_t i = 0, index; i != n; ++i) + { + index = indices[1][i]; indices[0][histograms[1][0xff & (first[index] >> 8)]++] = index; + } - for (uint32_t i = 0, index; index = indices[0][i], i != n; ++i) + for (uint32_t i = 0, index; i != n; ++i) + { + index = indices[0][i]; indices[1][histograms[2][0xff & (first[index] >> 16)]++] = index; + } - for (uint32_t i = 0, index; index = indices[1][i], i != n; ++i) + for (uint32_t i = 0, index; i != n; ++i) + { + index = indices[1][i]; indices[0][histograms[3][first[index] >> 24]++] = index; + } } -template <typename Simd4f> -uint32_t longestAxis(const Simd4f& edgeLength) +template <typename T4f> +uint32_t longestAxis(const T4f& edgeLength) { const float* e = array(edgeLength); @@ -120,8 +129,8 @@ uint32_t longestAxis(const Simd4f& edgeLength) } } -template <typename Simd4f> -cloth::SwInterCollision<Simd4f>::SwInterCollision(const cloth::SwInterCollisionData* instances, uint32_t n, +template <typename T4f> +cloth::SwInterCollision<T4f>::SwInterCollision(const cloth::SwInterCollisionData* instances, uint32_t n, float colDist, float stiffness, uint32_t iterations, InterCollisionFilter filter, cloth::SwKernelAllocator& alloc) : mInstances(instances) @@ -145,33 +154,33 @@ cloth::SwInterCollision<Simd4f>::SwInterCollision(const cloth::SwInterCollisionD mTotalParticles += instances[i].mNumParticles; } -template <typename Simd4f> -cloth::SwInterCollision<Simd4f>::~SwInterCollision() +template <typename T4f> +cloth::SwInterCollision<T4f>::~SwInterCollision() { } namespace { // multiple x by m leaving w component of x intact -template <typename Simd4f> -PX_INLINE Simd4f transform(const Simd4f m[4], const Simd4f& x) +template <typename T4f> +PX_INLINE T4f transform(const T4f m[4], const T4f& x) { - const Simd4f a = m[3] + splat<0>(x) * m[0] + splat<1>(x) * m[1] + splat<2>(x) * m[2]; + const T4f a = m[3] + splat<0>(x) * m[0] + splat<1>(x) * m[1] + splat<2>(x) * m[2]; return select(sMaskXYZ, a, x); } // rotate x by m leaving w component intact -template <typename Simd4f> -PX_INLINE Simd4f rotate(const Simd4f m[4], const Simd4f& x) +template <typename T4f> +PX_INLINE T4f rotate(const T4f m[4], const T4f& x) { - const Simd4f a = splat<0>(x) * m[0] + splat<1>(x) * m[1] + splat<2>(x) * m[2]; + const T4f a = splat<0>(x) * m[0] + splat<1>(x) * m[1] + splat<2>(x) * m[2]; return select(sMaskXYZ, a, x); } -template <typename Simd4f> +template <typename T4f> struct ClothSorter { - typedef cloth::BoundingBox<Simd4f> BoundingBox; + typedef cloth::BoundingBox<T4f> BoundingBox; ClothSorter(BoundingBox* bounds, uint32_t n, uint32_t axis) : mBounds(bounds), mNumBounds(n), mAxis(axis) { @@ -194,15 +203,15 @@ struct ClothSorter // which potentially interact, the potential colliders are returned with their // cloth index and particle index in clothIndices and particleIndices, the // function returns the number of potential colliders -template <typename Simd4f> +template <typename T4f> uint32_t calculatePotentialColliders(const cloth::SwInterCollisionData* cBegin, const cloth::SwInterCollisionData* cEnd, - const Simd4f& colDist, uint16_t* clothIndices, uint32_t* particleIndices, - cloth::BoundingBox<Simd4f>& bounds, uint32_t* overlapMasks, + const T4f& colDist, uint16_t* clothIndices, uint32_t* particleIndices, + cloth::BoundingBox<T4f>& bounds, uint32_t* overlapMasks, cloth::InterCollisionFilter filter, cloth::SwKernelAllocator& allocator) { using namespace cloth; - typedef BoundingBox<Simd4f> BoundingBox; + typedef BoundingBox<T4f> BoundingBox; uint32_t numParticles = 0; const uint32_t numCloths = uint32_t(cEnd - cBegin); @@ -212,7 +221,7 @@ uint32_t calculatePotentialColliders(const cloth::SwInterCollisionData* cBegin, BoundingBox* const overlapBounds = static_cast<BoundingBox*>(allocator.allocate(numCloths * sizeof(BoundingBox))); // union of all cloth world bounds - BoundingBox totalClothBounds = emptyBounds<Simd4f>(); + BoundingBox totalClothBounds = emptyBounds<T4f>(); uint32_t* sortedIndices = static_cast<uint32_t*>(allocator.allocate(numCloths * sizeof(uint32_t))); @@ -237,7 +246,7 @@ uint32_t calculatePotentialColliders(const cloth::SwInterCollisionData* cBegin, // sort indices by their minimum extent on the longest axis const uint32_t sweepAxis = longestAxis(totalClothBounds.mUpper - totalClothBounds.mLower); - ClothSorter<Simd4f> predicate(clothBounds, numCloths, sweepAxis); + ClothSorter<T4f> predicate(clothBounds, numCloths, sweepAxis); shdfnd::sort(sortedIndices, numCloths, predicate, nv::cloth::NonTrackingAllocator()); for (uint32_t i = 0; i < numCloths; ++i) @@ -247,8 +256,8 @@ uint32_t calculatePotentialColliders(const cloth::SwInterCollisionData* cBegin, const SwInterCollisionData& a = cBegin[sortedIndices[i]]; // local bounds - const Simd4f aCenter = load(reinterpret_cast<const float*>(&a.mBoundsCenter)); - const Simd4f aHalfExtent = load(reinterpret_cast<const float*>(&a.mBoundsHalfExtent)) + colDist; + const T4f aCenter = load(reinterpret_cast<const float*>(&a.mBoundsCenter)); + const T4f aHalfExtent = load(reinterpret_cast<const float*>(&a.mBoundsHalfExtent)) + colDist; const BoundingBox aBounds = { aCenter - aHalfExtent, aCenter + aHalfExtent }; const PxMat44 aToWorld = PxMat44(a.mGlobalPose); @@ -296,7 +305,7 @@ uint32_t calculatePotentialColliders(const cloth::SwInterCollisionData* cBegin, BoundingBox iBounds = intersectBounds(aBounds, bBounds); // setup bounding box w to make point containment test cheaper - Simd4f floatMax = gSimd4fFloatMax & static_cast<Simd4f>(sMaskW); + T4f floatMax = gSimd4fFloatMax & static_cast<T4f>(sMaskW); iBounds.mLower = (iBounds.mLower & sMaskXYZ) | -floatMax; iBounds.mUpper = (iBounds.mUpper & sMaskXYZ) | floatMax; @@ -310,22 +319,22 @@ uint32_t calculatePotentialColliders(const cloth::SwInterCollisionData* cBegin, const uint32_t clothIndex = sortedIndices[i]; overlapMasks[clothIndex] = overlapMask; - Simd4f* pBegin = reinterpret_cast<Simd4f*>(a.mParticles); - Simd4f* qBegin = reinterpret_cast<Simd4f*>(a.mPrevParticles); + T4f* pBegin = reinterpret_cast<T4f*>(a.mParticles); + T4f* qBegin = reinterpret_cast<T4f*>(a.mPrevParticles); - const Simd4f xform[4] = { load(reinterpret_cast<const float*>(&aToWorld.column0)), + const T4f xform[4] = { load(reinterpret_cast<const float*>(&aToWorld.column0)), load(reinterpret_cast<const float*>(&aToWorld.column1)), load(reinterpret_cast<const float*>(&aToWorld.column2)), load(reinterpret_cast<const float*>(&aToWorld.column3)) }; - Simd4f impulseInvScale = recip(Simd4f(simd4f(cBegin[clothIndex].mImpulseScale))); + T4f impulseInvScale = recip(T4f(simd4f(cBegin[clothIndex].mImpulseScale))); for (uint32_t k = 0; k < a.mNumParticles; ++k) { - Simd4f* pIt = a.mIndices ? pBegin + a.mIndices[k] : pBegin + k; - Simd4f* qIt = a.mIndices ? qBegin + a.mIndices[k] : qBegin + k; + T4f* pIt = a.mIndices ? pBegin + a.mIndices[k] : pBegin + k; + T4f* qIt = a.mIndices ? qBegin + a.mIndices[k] : qBegin + k; - const Simd4f p = *pIt; + const T4f p = *pIt; for (const BoundingBox* oIt = overlapBounds, *oEnd = overlapBounds + numOverlaps; oIt != oEnd; ++oIt) { @@ -339,7 +348,7 @@ uint32_t calculatePotentialColliders(const cloth::SwInterCollisionData* cBegin, // (will be transformed back after collision) *pIt = transform(xform, p); - Simd4f impulse = (p - *qIt) * impulseInvScale; + T4f impulse = (p - *qIt) * impulseInvScale; *qIt = rotate(xform, impulse); // update world bounds @@ -364,8 +373,8 @@ uint32_t calculatePotentialColliders(const cloth::SwInterCollisionData* cBegin, } } -template <typename Simd4f> -PX_INLINE Simd4f& cloth::SwInterCollision<Simd4f>::getParticle(uint32_t index) +template <typename T4f> +PX_INLINE T4f& cloth::SwInterCollision<T4f>::getParticle(uint32_t index) { NV_CLOTH_ASSERT(index < mNumParticles); @@ -374,11 +383,11 @@ PX_INLINE Simd4f& cloth::SwInterCollision<Simd4f>::getParticle(uint32_t index) NV_CLOTH_ASSERT(clothIndex < mNumInstances); - return reinterpret_cast<Simd4f&>(mInstances[clothIndex].mParticles[particleIndex]); + return reinterpret_cast<T4f&>(mInstances[clothIndex].mParticles[particleIndex]); } -template <typename Simd4f> -void cloth::SwInterCollision<Simd4f>::operator()() +template <typename T4f> +void cloth::SwInterCollision<T4f>::operator()() { mNumTests = mNumCollisions = 0; @@ -389,7 +398,7 @@ void cloth::SwInterCollision<Simd4f>::operator()() for (uint32_t k = 0; k < mNumIterations; ++k) { // world bounds of particles - BoundingBox<Simd4f> bounds = emptyBounds<Simd4f>(); + BoundingBox<T4f> bounds = emptyBounds<T4f>(); // calculate potentially colliding set { @@ -405,8 +414,8 @@ void cloth::SwInterCollision<Simd4f>::operator()() { NV_CLOTH_PROFILE_ZONE("cloth::SwInterCollision::Collide", /*ProfileContext::None*/ 0); - Simd4f lowerBound = bounds.mLower; - Simd4f edgeLength = max(bounds.mUpper - lowerBound, sEpsilon); + T4f lowerBound = bounds.mLower; + T4f edgeLength = max(bounds.mUpper - lowerBound, sEpsilon); // sweep along longest axis uint32_t sweepAxis = longestAxis(edgeLength); @@ -414,15 +423,15 @@ void cloth::SwInterCollision<Simd4f>::operator()() uint32_t hashAxis1 = (sweepAxis + 2) % 3; // reserve 0, 127, and 65535 for sentinel - Simd4f cellSize = max(mCollisionDistance, simd4f(1.0f / 253) * edgeLength); + T4f cellSize = max(mCollisionDistance, simd4f(1.0f / 253) * edgeLength); array(cellSize)[sweepAxis] = array(edgeLength)[sweepAxis] / 65533; - Simd4f one = gSimd4fOne; - Simd4f gridSize = simd4f(254.0f); + T4f one = gSimd4fOne; + T4f gridSize = simd4f(254.0f); array(gridSize)[sweepAxis] = 65534.0f; - Simd4f gridScale = recip<1>(cellSize); - Simd4f gridBias = -lowerBound * gridScale + one; + T4f gridScale = recip<1>(cellSize); + T4f gridBias = -lowerBound * gridScale + one; void* buffer = mAllocator.allocate(getBufferSize(mNumParticles)); @@ -430,13 +439,13 @@ void cloth::SwInterCollision<Simd4f>::operator()() uint32_t* __restrict sortedKeys = sortedIndices + mNumParticles; uint32_t* __restrict keys = std::max(sortedKeys + mNumParticles, sortedIndices + 2 * mNumParticles + 1024); - typedef typename Simd4fToSimd4i<Simd4f>::Type Simd4i; + typedef typename Simd4fToSimd4i<T4f>::Type Simd4i; // create keys for (uint32_t i = 0; i < mNumParticles; ++i) { // grid coordinate - Simd4f indexf = getParticle(i) * gridScale + gridBias; + T4f indexf = getParticle(i) * gridScale + gridBias; // need to clamp index because shape collision potentially // pushes particles outside of their original bounds @@ -486,7 +495,7 @@ void cloth::SwInterCollision<Simd4f>::operator()() { NV_CLOTH_PROFILE_ZONE("cloth::SwInterCollision::PostTransform", /*ProfileContext::None*/ 0); - Simd4f toLocal[4], impulseScale; + T4f toLocal[4], impulseScale; uint16_t lastCloth = uint16_t(0xffff); for (uint32_t i = 0; i < mNumParticles; ++i) @@ -510,12 +519,12 @@ void cloth::SwInterCollision<Simd4f>::operator()() } uint32_t particleIndex = mParticleIndices[i]; - Simd4f& particle = reinterpret_cast<Simd4f&>(instance->mParticles[particleIndex]); - Simd4f& impulse = reinterpret_cast<Simd4f&>(instance->mPrevParticles[particleIndex]); + T4f& particle = reinterpret_cast<T4f&>(instance->mParticles[particleIndex]); + T4f& impulse = reinterpret_cast<T4f&>(instance->mPrevParticles[particleIndex]); particle = transform(toLocal, particle); // avoid w becoming negative due to numerical inaccuracies - impulse = max(sZeroW, particle - rotate(toLocal, Simd4f(impulse * impulseScale))); + impulse = max(sZeroW, particle - rotate(toLocal, T4f(impulse * impulseScale))); } } } @@ -525,15 +534,15 @@ void cloth::SwInterCollision<Simd4f>::operator()() mAllocator.deallocate(mClothIndices); } -template <typename Simd4f> -size_t cloth::SwInterCollision<Simd4f>::estimateTemporaryMemory(SwInterCollisionData* cloths, uint32_t n) +template <typename T4f> +size_t cloth::SwInterCollision<T4f>::estimateTemporaryMemory(SwInterCollisionData* cloths, uint32_t n) { // count total particles uint32_t numParticles = 0; for (uint32_t i = 0; i < n; ++i) numParticles += cloths[i].mNumParticles; - uint32_t boundsSize = 2 * n * sizeof(BoundingBox<Simd4f>) + n * sizeof(uint32_t); + uint32_t boundsSize = 2 * n * sizeof(BoundingBox<T4f>) + n * sizeof(uint32_t); uint32_t clothIndicesSize = numParticles * sizeof(uint16_t); uint32_t particleIndicesSize = numParticles * sizeof(uint32_t); uint32_t masksSize = n * sizeof(uint32_t); @@ -541,8 +550,8 @@ size_t cloth::SwInterCollision<Simd4f>::estimateTemporaryMemory(SwInterCollision return boundsSize + clothIndicesSize + particleIndicesSize + masksSize + getBufferSize(numParticles); } -template <typename Simd4f> -size_t cloth::SwInterCollision<Simd4f>::getBufferSize(uint32_t numParticles) +template <typename T4f> +size_t cloth::SwInterCollision<T4f>::getBufferSize(uint32_t numParticles) { uint32_t keysSize = numParticles * sizeof(uint32_t); uint32_t indicesSize = numParticles * sizeof(uint32_t); @@ -551,8 +560,8 @@ size_t cloth::SwInterCollision<Simd4f>::getBufferSize(uint32_t numParticles) return keysSize + indicesSize + std::max(indicesSize + histogramSize, keysSize); } -template <typename Simd4f> -void cloth::SwInterCollision<Simd4f>::collideParticle(uint32_t index) +template <typename T4f> +void cloth::SwInterCollision<T4f>::collideParticle(uint32_t index) { uint16_t clothIndex = mClothIndices[index]; @@ -562,10 +571,10 @@ void cloth::SwInterCollision<Simd4f>::collideParticle(uint32_t index) const SwInterCollisionData* instance = mInstances + clothIndex; uint32_t particleIndex = mParticleIndices[index]; - Simd4f& particle = reinterpret_cast<Simd4f&>(instance->mParticles[particleIndex]); + T4f& particle = reinterpret_cast<T4f&>(instance->mParticles[particleIndex]); - Simd4f diff = particle - mParticle; - Simd4f distSqr = dot3(diff, diff); + T4f diff = particle - mParticle; + T4f distSqr = dot3(diff, diff); #if PX_DEBUG ++mNumTests; @@ -574,17 +583,17 @@ void cloth::SwInterCollision<Simd4f>::collideParticle(uint32_t index) if (allGreater(distSqr, mCollisionSquareDistance)) return; - Simd4f w0 = splat<3>(mParticle); - Simd4f w1 = splat<3>(particle); + T4f w0 = splat<3>(mParticle); + T4f w1 = splat<3>(particle); - Simd4f ratio = mCollisionDistance * rsqrt<1>(distSqr); - Simd4f scale = mStiffness * recip<1>(sEpsilon + w0 + w1); - Simd4f delta = (scale * (diff - diff * ratio)) & sMaskXYZ; + T4f ratio = mCollisionDistance * rsqrt<1>(distSqr); + T4f scale = mStiffness * recip<1>(sEpsilon + w0 + w1); + T4f delta = (scale * (diff - diff * ratio)) & sMaskXYZ; mParticle = mParticle + delta * w0; particle = particle - delta * w1; - Simd4f& impulse = reinterpret_cast<Simd4f&>(instance->mPrevParticles[particleIndex]); + T4f& impulse = reinterpret_cast<T4f&>(instance->mPrevParticles[particleIndex]); mImpulse = mImpulse + delta * w0; impulse = impulse - delta * w1; @@ -594,8 +603,8 @@ void cloth::SwInterCollision<Simd4f>::collideParticle(uint32_t index) #endif } -template <typename Simd4f> -void cloth::SwInterCollision<Simd4f>::collideParticles(const uint32_t* keys, uint32_t firstColumnSize, +template <typename T4f> +void cloth::SwInterCollision<T4f>::collideParticles(const uint32_t* keys, uint32_t firstColumnSize, const uint32_t* indices, uint32_t numParticles, uint32_t collisionDistance) { @@ -653,8 +662,8 @@ void cloth::SwInterCollision<Simd4f>::collideParticles(const uint32_t* keys, uin const SwInterCollisionData* instance = mInstances + mClothIndex; mParticleIndex = mParticleIndices[index]; - mParticle = reinterpret_cast<const Simd4f&>(instance->mParticles[mParticleIndex]); - mImpulse = reinterpret_cast<const Simd4f&>(instance->mPrevParticles[mParticleIndex]); + mParticle = reinterpret_cast<const T4f&>(instance->mParticles[mParticleIndex]); + mImpulse = reinterpret_cast<const T4f&>(instance->mPrevParticles[mParticleIndex]); uint32_t key = *kFirst[0]; @@ -689,8 +698,8 @@ void cloth::SwInterCollision<Simd4f>::collideParticles(const uint32_t* keys, uin } // write back particle and impulse - reinterpret_cast<Simd4f&>(instance->mParticles[mParticleIndex]) = mParticle; - reinterpret_cast<Simd4f&>(instance->mPrevParticles[mParticleIndex]) = mImpulse; + reinterpret_cast<T4f&>(instance->mParticles[mParticleIndex]) = mParticle; + reinterpret_cast<T4f&>(instance->mPrevParticles[mParticleIndex]) = mImpulse; } } diff --git a/NvCloth/src/SwInterCollision.h b/NvCloth/src/SwInterCollision.h index 656fbbc..f57fe6c 100644 --- a/NvCloth/src/SwInterCollision.h +++ b/NvCloth/src/SwInterCollision.h @@ -78,7 +78,7 @@ struct SwInterCollisionData void* mUserData; }; -template <typename Simd4f> +template <typename T4f> class SwInterCollision { @@ -100,17 +100,17 @@ class SwInterCollision void collideParticles(const uint32_t* keys, uint32_t firstColumnSize, const uint32_t* sortedIndices, uint32_t numParticles, uint32_t collisionDistance); - Simd4f& getParticle(uint32_t index); + T4f& getParticle(uint32_t index); // better wrap these in a struct void collideParticle(uint32_t index); - Simd4f mParticle; - Simd4f mImpulse; + T4f mParticle; + T4f mImpulse; - Simd4f mCollisionDistance; - Simd4f mCollisionSquareDistance; - Simd4f mStiffness; + T4f mCollisionDistance; + T4f mCollisionSquareDistance; + T4f mStiffness; uint16_t mClothIndex; uint32_t mClothMask; @@ -137,6 +137,15 @@ class SwInterCollision mutable uint32_t mNumCollisions; }; + +//explicit template instantiation declaration +#if NV_SIMD_SIMD +extern template class SwInterCollision<Simd4f>; +#endif +#if NV_SIMD_SCALAR +extern template class SwInterCollision<Scalar4f>; +#endif + } // namespace cloth } // namespace nv diff --git a/NvCloth/src/SwSelfCollision.cpp b/NvCloth/src/SwSelfCollision.cpp index 6b3e267..095943d 100644 --- a/NvCloth/src/SwSelfCollision.cpp +++ b/NvCloth/src/SwSelfCollision.cpp @@ -68,16 +68,16 @@ void radixSort(const uint32_t* first, const uint32_t* last, uint16_t* out) for (uint32_t i = 0; i < 256; ++i) { uint16_t temp0 = uint16_t(histograms[0][i] + sums[0]); - histograms[0][i] = sums[0], sums[0] = temp0; + histograms[0][i] = sums[0]; sums[0] = temp0; uint16_t temp1 = uint16_t(histograms[1][i] + sums[1]); - histograms[1][i] = sums[1], sums[1] = temp1; + histograms[1][i] = sums[1]; sums[1] = temp1; uint16_t temp2 = uint16_t(histograms[2][i] + sums[2]); - histograms[2][i] = sums[2], sums[2] = temp2; + histograms[2][i] = sums[2]; sums[2] = temp2; uint16_t temp3 = uint16_t(histograms[3][i] + sums[3]); - histograms[3][i] = sums[3], sums[3] = temp3; + histograms[3][i] = sums[3]; sums[3] = temp3; } NV_CLOTH_ASSERT(sums[0] == n && sums[1] == n && sums[2] == n && sums[3] == n); @@ -93,18 +93,27 @@ void radixSort(const uint32_t* first, const uint32_t* last, uint16_t* out) for (uint16_t i = 0; i != n; ++i) indices[1][histograms[0][0xff & first[i]]++] = i; - for (uint16_t i = 0, index; index = indices[1][i], i != n; ++i) + for (uint16_t i = 0, index; i != n; ++i) + { + index = indices[1][i]; indices[0][histograms[1][0xff & (first[index] >> 8)]++] = index; + } - for (uint16_t i = 0, index; index = indices[0][i], i != n; ++i) + for (uint16_t i = 0, index; i != n; ++i) + { + index = indices[0][i]; indices[1][histograms[2][0xff & (first[index] >> 16)]++] = index; - - for (uint16_t i = 0, index; index = indices[1][i], i != n; ++i) + + } + for (uint16_t i = 0, index; i != n; ++i) + { + index = indices[1][i]; indices[0][histograms[3][first[index] >> 24]++] = index; + } } -template <typename Simd4f> -uint32_t longestAxis(const Simd4f& edgeLength) +template <typename T4f> +uint32_t longestAxis(const T4f& edgeLength) { const float* e = array(edgeLength); @@ -131,30 +140,30 @@ inline uint32_t align2(uint32_t x) } // anonymous namespace -template <typename Simd4f> -cloth::SwSelfCollision<Simd4f>::SwSelfCollision(cloth::SwClothData& clothData, cloth::SwKernelAllocator& alloc) +template <typename T4f> +cloth::SwSelfCollision<T4f>::SwSelfCollision(cloth::SwClothData& clothData, cloth::SwKernelAllocator& alloc) : mClothData(clothData), mAllocator(alloc) { mCollisionDistance = simd4f(mClothData.mSelfCollisionDistance); mCollisionSquareDistance = mCollisionDistance * mCollisionDistance; - mStiffness = sMaskXYZ & static_cast<Simd4f>(simd4f(mClothData.mSelfCollisionStiffness)); + mStiffness = sMaskXYZ & static_cast<T4f>(simd4f(mClothData.mSelfCollisionStiffness)); } -template <typename Simd4f> -cloth::SwSelfCollision<Simd4f>::~SwSelfCollision() +template <typename T4f> +cloth::SwSelfCollision<T4f>::~SwSelfCollision() { } -template <typename Simd4f> -void cloth::SwSelfCollision<Simd4f>::operator()() +template <typename T4f> +void cloth::SwSelfCollision<T4f>::operator()() { mNumTests = mNumCollisions = 0; if (!isSelfCollisionEnabled(mClothData)) return; - Simd4f lowerBound = load(mClothData.mCurBounds); - Simd4f edgeLength = max(load(mClothData.mCurBounds + 3) - lowerBound, gSimd4fEpsilon); + T4f lowerBound = load(mClothData.mCurBounds); + T4f edgeLength = max(load(mClothData.mCurBounds + 3) - lowerBound, gSimd4fEpsilon); // sweep along longest axis uint32_t sweepAxis = longestAxis(edgeLength); @@ -162,15 +171,15 @@ void cloth::SwSelfCollision<Simd4f>::operator()() uint32_t hashAxis1 = (sweepAxis + 2) % 3; // reserve 0, 127, and 65535 for sentinel - Simd4f cellSize = max(mCollisionDistance, simd4f(1.0f / 253) * edgeLength); + T4f cellSize = max(mCollisionDistance, simd4f(1.0f / 253) * edgeLength); array(cellSize)[sweepAxis] = array(edgeLength)[sweepAxis] / 65533; - Simd4f one = gSimd4fOne; - Simd4f gridSize = simd4f(254.0f); + T4f one = gSimd4fOne; + T4f gridSize = simd4f(254.0f); array(gridSize)[sweepAxis] = 65534.0f; - Simd4f gridScale = recip<1>(cellSize); - Simd4f gridBias = -lowerBound * gridScale + one; + T4f gridScale = recip<1>(cellSize); + T4f gridBias = -lowerBound * gridScale + one; uint32_t numIndices = mClothData.mNumSelfCollisionIndices; void* buffer = mAllocator.allocate(getBufferSize(numIndices)); @@ -180,7 +189,7 @@ void cloth::SwSelfCollision<Simd4f>::operator()() uint16_t* __restrict sortedIndices = reinterpret_cast<uint16_t*>(keys + numIndices); uint32_t* __restrict sortedKeys = reinterpret_cast<uint32_t*>(sortedIndices + align2(numIndices)); - const Simd4f* particles = reinterpret_cast<const Simd4f*>(mClothData.mCurParticles); + const T4f* particles = reinterpret_cast<const T4f*>(mClothData.mCurParticles); // create keys for (uint32_t i = 0; i < numIndices; ++i) @@ -188,7 +197,7 @@ void cloth::SwSelfCollision<Simd4f>::operator()() uint32_t index = indices ? indices[i] : i; // grid coordinate - Simd4f keyf = particles[index] * gridScale + gridBias; + T4f keyf = particles[index] * gridScale + gridBias; // need to clamp index because shape collision potentially // pushes particles outside of their original bounds @@ -235,8 +244,8 @@ void cloth::SwSelfCollision<Simd4f>::operator()() uint32_t numCollisions = mNumCollisions; mNumCollisions = 0; - Simd4f* qarticles = reinterpret_cast< - Simd4f*>(mClothData.mCurParticles); + T4f* qarticles = reinterpret_cast< + T4f*>(mClothData.mCurParticles); for (uint32_t i = 0; i < numIndices; ++i) { uint32_t indexI = indices ? indices[i] : i; @@ -253,16 +262,16 @@ void cloth::SwSelfCollision<Simd4f>::operator()() */ } -template <typename Simd4f> -size_t cloth::SwSelfCollision<Simd4f>::estimateTemporaryMemory(const SwCloth& cloth) +template <typename T4f> +size_t cloth::SwSelfCollision<T4f>::estimateTemporaryMemory(const SwCloth& cloth) { uint32_t numIndices = uint32_t(cloth.mSelfCollisionIndices.empty() ? cloth.mCurParticles.size() : cloth.mSelfCollisionIndices.size()); return isSelfCollisionEnabled(cloth) ? getBufferSize(numIndices) : 0; } -template <typename Simd4f> -size_t cloth::SwSelfCollision<Simd4f>::getBufferSize(uint32_t numIndices) +template <typename T4f> +size_t cloth::SwSelfCollision<T4f>::getBufferSize(uint32_t numIndices) { uint32_t keysSize = numIndices * sizeof(uint32_t); uint32_t indicesSize = align2(numIndices) * sizeof(uint16_t); @@ -270,13 +279,13 @@ size_t cloth::SwSelfCollision<Simd4f>::getBufferSize(uint32_t numIndices) return keysSize + indicesSize + std::max(radixSize, keysSize + uint32_t(sizeof(uint32_t))); } -template <typename Simd4f> +template <typename T4f> template <bool useRestParticles> -void cloth::SwSelfCollision<Simd4f>::collideParticles(Simd4f& pos0, Simd4f& pos1, const Simd4f& pos0rest, - const Simd4f& pos1rest) +void cloth::SwSelfCollision<T4f>::collideParticles(T4f& pos0, T4f& pos1, const T4f& pos0rest, + const T4f& pos1rest) { - Simd4f diff = pos1 - pos0; - Simd4f distSqr = dot3(diff, diff); + T4f diff = pos1 - pos0; + T4f distSqr = dot3(diff, diff); #if PX_DEBUG ++mNumTests; @@ -289,19 +298,19 @@ void cloth::SwSelfCollision<Simd4f>::collideParticles(Simd4f& pos0, Simd4f& pos1 { // calculate distance in rest configuration, if less than collision // distance then ignore collision between particles in deformed config - Simd4f restDiff = pos1rest - pos0rest; - Simd4f restDistSqr = dot3(restDiff, restDiff); + T4f restDiff = pos1rest - pos0rest; + T4f restDistSqr = dot3(restDiff, restDiff); if (allGreater(mCollisionSquareDistance, restDistSqr)) return; } - Simd4f w0 = splat<3>(pos0); - Simd4f w1 = splat<3>(pos1); + T4f w0 = splat<3>(pos0); + T4f w1 = splat<3>(pos1); - Simd4f ratio = mCollisionDistance * rsqrt(distSqr); - Simd4f scale = mStiffness * recip(gSimd4fEpsilon + w0 + w1); - Simd4f delta = (scale * (diff - diff * ratio)) & sMaskXYZ; + T4f ratio = mCollisionDistance * rsqrt(distSqr); + T4f scale = mStiffness * recip(gSimd4fEpsilon + w0 + w1); + T4f delta = (scale * (diff - diff * ratio)) & sMaskXYZ; pos0 = pos0 + delta * w0; pos1 = pos1 - delta * w1; @@ -311,14 +320,14 @@ void cloth::SwSelfCollision<Simd4f>::collideParticles(Simd4f& pos0, Simd4f& pos1 #endif } -template <typename Simd4f> +template <typename T4f> template <bool useRestParticles> -void cloth::SwSelfCollision<Simd4f>::collideParticles(const uint32_t* keys, uint16_t firstColumnSize, +void cloth::SwSelfCollision<T4f>::collideParticles(const uint32_t* keys, uint16_t firstColumnSize, const uint16_t* indices, uint32_t collisionDistance) { - Simd4f* __restrict particles = reinterpret_cast<Simd4f*>(mClothData.mCurParticles); - Simd4f* __restrict restParticles = - useRestParticles ? reinterpret_cast<Simd4f*>(mClothData.mRestPositions) : particles; + T4f* __restrict particles = reinterpret_cast<T4f*>(mClothData.mCurParticles); + T4f* __restrict restParticles = + useRestParticles ? reinterpret_cast<T4f*>(mClothData.mRestPositions) : particles; const uint32_t bucketMask = uint16_t(-1); @@ -367,8 +376,8 @@ void cloth::SwSelfCollision<Simd4f>::collideParticles(const uint32_t* keys, uint NV_CLOTH_ASSERT(*iIt < mClothData.mNumParticles); // load current particle once outside of inner loop - Simd4f particle = particles[*iIt]; - Simd4f restParticle = restParticles[*iIt]; + T4f particle = particles[*iIt]; + T4f restParticle = restParticles[*iIt]; uint32_t key = *kFirst[0]; diff --git a/NvCloth/src/SwSelfCollision.h b/NvCloth/src/SwSelfCollision.h index 0348e29..cd665b6 100644 --- a/NvCloth/src/SwSelfCollision.h +++ b/NvCloth/src/SwSelfCollision.h @@ -43,10 +43,10 @@ struct SwClothData; typedef StackAllocator<16> SwKernelAllocator; -template <typename Simd4f> +template <typename T4f> class SwSelfCollision { - typedef typename Simd4fToSimd4i<Simd4f>::Type Simd4i; + typedef typename Simd4fToSimd4i<T4f>::Type Simd4i; public: SwSelfCollision(SwClothData& clothData, SwKernelAllocator& alloc); @@ -61,14 +61,14 @@ class SwSelfCollision static size_t getBufferSize(uint32_t); template <bool useRestParticles> - void collideParticles(Simd4f&, Simd4f&, const Simd4f&, const Simd4f&); + void collideParticles(T4f&, T4f&, const T4f&, const T4f&); template <bool useRestParticles> void collideParticles(const uint32_t*, uint16_t, const uint16_t*, uint32_t); - Simd4f mCollisionDistance; - Simd4f mCollisionSquareDistance; - Simd4f mStiffness; + T4f mCollisionDistance; + T4f mCollisionSquareDistance; + T4f mStiffness; SwClothData& mClothData; SwKernelAllocator& mAllocator; @@ -78,6 +78,15 @@ class SwSelfCollision mutable uint32_t mNumCollisions; }; +//explicit template instantiation declaration +#if NV_SIMD_SIMD +extern template class SwSelfCollision<Simd4f>; +#endif +#if NV_SIMD_SCALAR +extern template class SwSelfCollision<Scalar4f>; +#endif + + } // namespace cloth } // namespace nv diff --git a/NvCloth/src/SwSolver.cpp b/NvCloth/src/SwSolver.cpp index c83eed8..c7437e1 100644 --- a/NvCloth/src/SwSolver.cpp +++ b/NvCloth/src/SwSolver.cpp @@ -93,29 +93,57 @@ void sortTasks(shdfnd::Array<T, cloth::NonTrackingAllocator>& tasks) void cloth::SwSolver::addCloth(Cloth* cloth) { - SwCloth& swCloth = static_cast<SwClothImpl&>(*cloth).mCloth; + SwCloth& swCloth = *static_cast<SwCloth*>(cloth); mSimulatedCloths.pushBack(SimulatedCloth(swCloth, this)); sortTasks(mSimulatedCloths); + + mCloths.pushBack(&swCloth); } void cloth::SwSolver::removeCloth(Cloth* cloth) { - SwCloth& swCloth = static_cast<SwClothImpl&>(*cloth).mCloth; + SwCloth& swCloth = *static_cast<SwCloth*>(cloth); - Vector<SimulatedCloth>::Type::Iterator tIt = mSimulatedCloths.begin(); - Vector<SimulatedCloth>::Type::Iterator tEnd = mSimulatedCloths.end(); - while (tIt != tEnd && tIt->mCloth != &swCloth) - ++tIt; + //Remove from mSimulatedCloths + { + Vector<SimulatedCloth>::Type::Iterator tIt = mSimulatedCloths.begin(); + Vector<SimulatedCloth>::Type::Iterator tEnd = mSimulatedCloths.end(); + while(tIt != tEnd && tIt->mCloth != &swCloth) + ++tIt; + + if(tIt != tEnd) + { + NV_CLOTH_FREE(tIt->mScratchMemory); + mSimulatedCloths.replaceWithLast(tIt); + sortTasks(mSimulatedCloths); + } + } - if (tIt != tEnd) + //Remove from mCloths { - NV_CLOTH_FREE(tIt->mScratchMemory); - mSimulatedCloths.replaceWithLast(tIt); - sortTasks(mSimulatedCloths); + ClothVector::Iterator tEnd = mCloths.end(); + ClothVector::Iterator it = mCloths.find(&swCloth); + + if(it != tEnd) + { + mCloths.replaceWithLast(it); + } } } +int cloth::SwSolver::getNumCloths() const +{ + return mCloths.size(); +} +cloth::Cloth * const * cloth::SwSolver::getClothList() const +{ + if(getNumCloths()) + return reinterpret_cast<Cloth* const*>(&mCloths[0]); + else + return nullptr; +} + bool cloth::SwSolver::beginSimulation(float dt) { if (mSimulatedCloths.empty()) diff --git a/NvCloth/src/SwSolver.h b/NvCloth/src/SwSolver.h index 0c503ac..c7b177b 100644 --- a/NvCloth/src/SwSolver.h +++ b/NvCloth/src/SwSolver.h @@ -65,6 +65,8 @@ class SwSolver : public Solver virtual void addCloth(Cloth*) override; virtual void removeCloth(Cloth*) override; + virtual int getNumCloths() const override; + virtual Cloth * const * getClothList() const override; // functions executing the simulation work. virtual bool beginSimulation(float dt) override; @@ -117,6 +119,8 @@ class SwSolver : public Solver private: Vector<SimulatedCloth>::Type mSimulatedCloths; + typedef Vector<SwCloth*>::Type ClothVector; + ClothVector mCloths; float mInterCollisionDistance; diff --git a/NvCloth/src/SwSolverKernel.cpp b/NvCloth/src/SwSolverKernel.cpp index f53c9ab..52dfdaa 100644 --- a/NvCloth/src/SwSolverKernel.cpp +++ b/NvCloth/src/SwSolverKernel.cpp @@ -124,55 +124,55 @@ const Simd4fTupleFactory sMinusFloatMaxXYZ = simd4f(-FLT_MAX, -FLT_MAX, -FLT_MAX The g * dt * dt term is folded into accelIt. */ -template <typename Simd4f, typename AccelerationIterator> -void integrateParticles(Simd4f* __restrict curIt, Simd4f* __restrict curEnd, Simd4f* __restrict prevIt, - const Simd4f& scale, const AccelerationIterator& aIt, const Simd4f& prevBias) +template <typename T4f, typename AccelerationIterator> +void integrateParticles(T4f* __restrict curIt, T4f* __restrict curEnd, T4f* __restrict prevIt, + const T4f& scale, const AccelerationIterator& aIt, const T4f& prevBias) { // local copy to avoid LHS AccelerationIterator accelIt(aIt); for (; curIt != curEnd; ++curIt, ++prevIt, ++accelIt) { - Simd4f current = *curIt; - Simd4f previous = *prevIt; + T4f current = *curIt; + T4f previous = *prevIt; // if (current.w == 0) current.w = previous.w current = select(current > sMinusFloatMaxXYZ, current, previous); - Simd4f finiteMass = splat<3>(previous) > sFloatMaxW; - Simd4f delta = (current - previous) * scale + *accelIt; + T4f finiteMass = splat<3>(previous) > sFloatMaxW; + T4f delta = (current - previous) * scale + *accelIt; *curIt = current + (delta & finiteMass); *prevIt = select(sMaskW, previous, current) + (prevBias & finiteMass); } } -template <typename Simd4f, typename AccelerationIterator> -void integrateParticles(Simd4f* __restrict curIt, Simd4f* __restrict curEnd, Simd4f* __restrict prevIt, - const Simd4f (&prevMatrix)[3], const Simd4f (&curMatrix)[3], const AccelerationIterator& aIt, - const Simd4f& prevBias) +template <typename T4f, typename AccelerationIterator> +void integrateParticles(T4f* __restrict curIt, T4f* __restrict curEnd, T4f* __restrict prevIt, + const T4f (&prevMatrix)[3], const T4f (&curMatrix)[3], const AccelerationIterator& aIt, + const T4f& prevBias) { // local copy to avoid LHS AccelerationIterator accelIt(aIt); for (; curIt != curEnd; ++curIt, ++prevIt, ++accelIt) { - Simd4f current = *curIt; - Simd4f previous = *prevIt; + T4f current = *curIt; + T4f previous = *prevIt; // if (current.w == 0) current.w = previous.w current = select(current > sMinusFloatMaxXYZ, current, previous); - Simd4f finiteMass = splat<3>(previous) > sFloatMaxW; + T4f finiteMass = splat<3>(previous) > sFloatMaxW; // curMatrix * current + prevMatrix * previous + accel - Simd4f delta = cloth::transform(curMatrix, cloth::transform(prevMatrix, *accelIt, previous), current); + T4f delta = cloth::transform(curMatrix, cloth::transform(prevMatrix, *accelIt, previous), current); *curIt = current + (delta & finiteMass); *prevIt = select(sMaskW, previous, current) + (prevBias & finiteMass); } } -template <typename Simd4f, typename ConstraintIterator> -void constrainMotion(Simd4f* __restrict curIt, const Simd4f* __restrict curEnd, const ConstraintIterator& spheres, - const Simd4f& scaleBiasStiffness) +template <typename T4f, typename ConstraintIterator> +void constrainMotion(T4f* __restrict curIt, const T4f* __restrict curEnd, const ConstraintIterator& spheres, + const T4f& scaleBiasStiffness) { - Simd4f scale = splat<0>(scaleBiasStiffness); - Simd4f bias = splat<1>(scaleBiasStiffness); - Simd4f stiffness = splat<3>(scaleBiasStiffness); + T4f scale = splat<0>(scaleBiasStiffness); + T4f bias = splat<1>(scaleBiasStiffness); + T4f stiffness = splat<3>(scaleBiasStiffness); // local copy of iterator to maintain alignment ConstraintIterator sphIt = spheres; @@ -180,33 +180,33 @@ void constrainMotion(Simd4f* __restrict curIt, const Simd4f* __restrict curEnd, for (; curIt < curEnd; curIt += 4) { // todo: use msub where available - Simd4f curPos0 = curIt[0]; - Simd4f curPos1 = curIt[1]; - Simd4f curPos2 = curIt[2]; - Simd4f curPos3 = curIt[3]; + T4f curPos0 = curIt[0]; + T4f curPos1 = curIt[1]; + T4f curPos2 = curIt[2]; + T4f curPos3 = curIt[3]; //delta.xyz = sphereCenter - currentPosition //delta.w = sphereRadius - Simd4f delta0 = *sphIt - (sMaskXYZ & curPos0); + T4f delta0 = *sphIt - (sMaskXYZ & curPos0); ++sphIt; - Simd4f delta1 = *sphIt - (sMaskXYZ & curPos1); + T4f delta1 = *sphIt - (sMaskXYZ & curPos1); ++sphIt; - Simd4f delta2 = *sphIt - (sMaskXYZ & curPos2); + T4f delta2 = *sphIt - (sMaskXYZ & curPos2); ++sphIt; - Simd4f delta3 = *sphIt - (sMaskXYZ & curPos3); + T4f delta3 = *sphIt - (sMaskXYZ & curPos3); ++sphIt; - Simd4f deltaX = delta0, deltaY = delta1, deltaZ = delta2, deltaW = delta3; + T4f deltaX = delta0, deltaY = delta1, deltaZ = delta2, deltaW = delta3; transpose(deltaX, deltaY, deltaZ, deltaW); - Simd4f sqrLength = gSimd4fEpsilon + deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; - Simd4f radius = max(gSimd4fZero, deltaW * scale + bias); + T4f sqrLength = gSimd4fEpsilon + deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; + T4f radius = max(gSimd4fZero, deltaW * scale + bias); - Simd4f slack = gSimd4fOne - radius * rsqrt(sqrLength); + T4f slack = gSimd4fOne - radius * rsqrt(sqrLength); // if slack <= 0.0f then we don't want to affect particle // and can skip if all particles are unaffected - Simd4f isPositive; + T4f isPositive; if (anyGreater(slack, gSimd4fZero, isPositive)) { // set invMass to zero if radius is zero @@ -225,8 +225,8 @@ void constrainMotion(Simd4f* __restrict curIt, const Simd4f* __restrict curEnd, } } -template <typename Simd4f, typename ConstraintIterator> -void constrainSeparation(Simd4f* __restrict curIt, const Simd4f* __restrict curEnd, const ConstraintIterator& spheres) +template <typename T4f, typename ConstraintIterator> +void constrainSeparation(T4f* __restrict curIt, const T4f* __restrict curEnd, const ConstraintIterator& spheres) { // local copy of iterator to maintain alignment ConstraintIterator sphIt = spheres; @@ -234,32 +234,32 @@ void constrainSeparation(Simd4f* __restrict curIt, const Simd4f* __restrict curE for (; curIt < curEnd; curIt += 4) { // todo: use msub where available - Simd4f curPos0 = curIt[0]; - Simd4f curPos1 = curIt[1]; - Simd4f curPos2 = curIt[2]; - Simd4f curPos3 = curIt[3]; + T4f curPos0 = curIt[0]; + T4f curPos1 = curIt[1]; + T4f curPos2 = curIt[2]; + T4f curPos3 = curIt[3]; //delta.xyz = sphereCenter - currentPosition //delta.w = sphereRadius - Simd4f delta0 = *sphIt - (sMaskXYZ & curPos0); + T4f delta0 = *sphIt - (sMaskXYZ & curPos0); ++sphIt; - Simd4f delta1 = *sphIt - (sMaskXYZ & curPos1); + T4f delta1 = *sphIt - (sMaskXYZ & curPos1); ++sphIt; - Simd4f delta2 = *sphIt - (sMaskXYZ & curPos2); + T4f delta2 = *sphIt - (sMaskXYZ & curPos2); ++sphIt; - Simd4f delta3 = *sphIt - (sMaskXYZ & curPos3); + T4f delta3 = *sphIt - (sMaskXYZ & curPos3); ++sphIt; - Simd4f deltaX = delta0, deltaY = delta1, deltaZ = delta2, deltaW = delta3; + T4f deltaX = delta0, deltaY = delta1, deltaZ = delta2, deltaW = delta3; transpose(deltaX, deltaY, deltaZ, deltaW); - Simd4f sqrLength = gSimd4fEpsilon + deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; + T4f sqrLength = gSimd4fEpsilon + deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; - Simd4f slack = gSimd4fOne - deltaW * rsqrt<1>(sqrLength); + T4f slack = gSimd4fOne - deltaW * rsqrt<1>(sqrLength); // if slack >= 0.0f then we don't want to affect particle // and can skip if all particles are unaffected - Simd4f isNegative; + T4f isNegative; if (anyGreater(gSimd4fZero, slack, isNegative)) { slack = slack & isNegative; @@ -275,22 +275,22 @@ void constrainSeparation(Simd4f* __restrict curIt, const Simd4f* __restrict curE /** traditional gauss-seidel internal constraint solver */ -template <bool useMultiplier, typename Simd4f> +template <bool useMultiplier, typename T4f> void solveConstraints(float* __restrict posIt, const float* __restrict rIt, const float* __restrict stIt, const float* __restrict rEnd, - const uint16_t* __restrict iIt, const Simd4f& stiffnessEtc, const Simd4f& stiffnessExponent) + const uint16_t* __restrict iIt, const T4f& stiffnessEtc, const T4f& stiffnessExponent) { //posIt particle position (and invMass) iterator //rIt,rEnd edge rest length iterator //iIt index set iterator - Simd4f stretchLimit, compressionLimit, multiplier; + T4f stretchLimit, compressionLimit, multiplier; if (useMultiplier) { stretchLimit = splat<3>(stiffnessEtc); compressionLimit = splat<2>(stiffnessEtc); multiplier = splat<1>(stiffnessEtc); } - Simd4f stiffness = splat<0>(stiffnessEtc); + T4f stiffness = splat<0>(stiffnessEtc); bool useStiffnessPerConstraint = stIt!=nullptr; for (; rIt != rEnd; rIt += 4, stIt += 4, iIt += 8) @@ -307,39 +307,39 @@ void solveConstraints(float* __restrict posIt, const float* __restrict rIt, cons //Load particle positions //v.w = invMass - Simd4f v0i = loadAligned(posIt, p0i); - Simd4f v0j = loadAligned(posIt, p0j); - Simd4f v1i = loadAligned(posIt, p1i); - Simd4f v1j = loadAligned(posIt, p1j); - Simd4f v2i = loadAligned(posIt, p2i); - Simd4f v2j = loadAligned(posIt, p2j); - Simd4f v3i = loadAligned(posIt, p3i); - Simd4f v3j = loadAligned(posIt, p3j); + T4f v0i = loadAligned(posIt, p0i); + T4f v0j = loadAligned(posIt, p0j); + T4f v1i = loadAligned(posIt, p1i); + T4f v1j = loadAligned(posIt, p1j); + T4f v2i = loadAligned(posIt, p2i); + T4f v2j = loadAligned(posIt, p2j); + T4f v3i = loadAligned(posIt, p3i); + T4f v3j = loadAligned(posIt, p3j); //offset.xyz = posB - posA //offset.w = invMassB + invMassA - Simd4f h0ij = v0j + v0i * sMinusOneXYZOneW; - Simd4f h1ij = v1j + v1i * sMinusOneXYZOneW; - Simd4f h2ij = v2j + v2i * sMinusOneXYZOneW; - Simd4f h3ij = v3j + v3i * sMinusOneXYZOneW; + T4f h0ij = v0j + v0i * sMinusOneXYZOneW; + T4f h1ij = v1j + v1i * sMinusOneXYZOneW; + T4f h2ij = v2j + v2i * sMinusOneXYZOneW; + T4f h3ij = v3j + v3i * sMinusOneXYZOneW; //h xyz = offset //vw = invMass sum - Simd4f hxij = h0ij, hyij = h1ij, hzij = h2ij, vwij = h3ij; + T4f hxij = h0ij, hyij = h1ij, hzij = h2ij, vwij = h3ij; transpose(hxij, hyij, hzij, vwij); //load rest lengths - Simd4f rij = loadAligned(rIt); + T4f rij = loadAligned(rIt); //Load/calculate the constraint stiffness - Simd4f stij = useStiffnessPerConstraint ? gSimd4fOne - exp2(stiffnessExponent * static_cast<Simd4f>(loadAligned(stIt))) : stiffness; + T4f stij = useStiffnessPerConstraint ? gSimd4fOne - exp2(stiffnessExponent * static_cast<T4f>(loadAligned(stIt))) : stiffness; //squared distance between particles: e2 = epsilon + |h|^2 - Simd4f e2ij = gSimd4fEpsilon + hxij * hxij + hyij * hyij + hzij * hzij; + T4f e2ij = gSimd4fEpsilon + hxij * hxij + hyij * hyij + hzij * hzij; //slack: er = 1 - r / sqrt(e2) // or er = 0 if rest length < epsilon - Simd4f erij = (gSimd4fOne - rij * rsqrt(e2ij)) & (rij > gSimd4fEpsilon); + T4f erij = (gSimd4fOne - rij * rsqrt(e2ij)) & (rij > gSimd4fEpsilon); if (useMultiplier) { @@ -347,7 +347,7 @@ void solveConstraints(float* __restrict posIt, const float* __restrict rIt, cons } //ex = er * stiffness / sqrt(epsilon + vw) - Simd4f exij = erij * stij * recip(gSimd4fEpsilon + vwij); + T4f exij = erij * stij * recip(gSimd4fEpsilon + vwij); //h = h * ex h0ij = h0ij * splat<0>(exij) & sMaskXYZ; @@ -372,22 +372,22 @@ void solveConstraints(float* __restrict posIt, const float* __restrict rIt, cons #endif // calculates upper bound of all position deltas -template <typename Simd4f> -Simd4f calculateMaxDelta(const Simd4f* prevIt, const Simd4f* curIt, const Simd4f* curEnd) +template <typename T4f> +T4f calculateMaxDelta(const T4f* prevIt, const T4f* curIt, const T4f* curEnd) { - Simd4f maxDelta = gSimd4fZero; + T4f maxDelta = gSimd4fZero; for (; curIt < curEnd; ++curIt, ++prevIt) maxDelta = max(maxDelta, abs(*curIt - *prevIt)); return maxDelta & sMaskXYZ; } -template <bool IsTurning, typename Simd4f> -void applyWind(Simd4f* __restrict curIt, const Simd4f* __restrict prevIt, const uint16_t* __restrict tIt, - const uint16_t* __restrict tEnd, Simd4f dragCoefficient, Simd4f liftCoefficient, Simd4f wind, - const Simd4f (&rotation)[3]) +template <bool IsTurning, typename T4f> +void applyWind(T4f* __restrict curIt, const T4f* __restrict prevIt, const uint16_t* __restrict tIt, + const uint16_t* __restrict tEnd, T4f dragCoefficient, T4f liftCoefficient, T4f wind, + const T4f (&rotation)[3]) { - const Simd4f oneThird = simd4f(1.0f / 3.0f); + const T4f oneThird = simd4f(1.0f / 3.0f); for (; tIt < tEnd; tIt += 3) { @@ -397,20 +397,20 @@ void applyWind(Simd4f* __restrict curIt, const Simd4f* __restrict prevIt, const uint16_t i2 = tIt[2]; //Get the current particle positions - Simd4f c0 = curIt[i0]; - Simd4f c1 = curIt[i1]; - Simd4f c2 = curIt[i2]; + T4f c0 = curIt[i0]; + T4f c1 = curIt[i1]; + T4f c2 = curIt[i2]; //Previous positions - Simd4f p0 = prevIt[i0]; - Simd4f p1 = prevIt[i1]; - Simd4f p2 = prevIt[i2]; + T4f p0 = prevIt[i0]; + T4f p1 = prevIt[i1]; + T4f p2 = prevIt[i2]; - Simd4f current = oneThird * (c0 + c1 + c2); - Simd4f previous = oneThird * (p0 + p1 + p2); + T4f current = oneThird * (c0 + c1 + c2); + T4f previous = oneThird * (p0 + p1 + p2); //offset of the triangle center, including wind - Simd4f delta = current - previous + wind; + T4f delta = current - previous + wind; if (IsTurning) { @@ -420,26 +420,26 @@ void applyWind(Simd4f* __restrict curIt, const Simd4f* __restrict prevIt, const } //not normalized - Simd4f normal = cross3(c2 - c0, c1 - c0); + T4f normal = cross3(c2 - c0, c1 - c0); - Simd4f doubleArea = sqrt(dot3(normal, normal)); + T4f doubleArea = sqrt(dot3(normal, normal)); - Simd4f invSqrScale = dot3(delta, delta); - Simd4f isZero = invSqrScale < gSimd4fEpsilon; - Simd4f scale = rsqrt(invSqrScale); + T4f invSqrScale = dot3(delta, delta); + T4f isZero = invSqrScale < gSimd4fEpsilon; + T4f scale = rsqrt(invSqrScale); //scale 'normalizes' delta, doubleArea normalized normal - Simd4f cosTheta = dot3(normal, delta) * scale / doubleArea; - Simd4f sinTheta = sqrt(max(gSimd4fZero, gSimd4fOne - cosTheta * cosTheta)); + T4f cosTheta = dot3(normal, delta) * scale / doubleArea; + T4f sinTheta = sqrt(max(gSimd4fZero, gSimd4fOne - cosTheta * cosTheta)); // orthogonal to delta, in delta-normal plane, same length as delta - Simd4f liftDir = cross3(cross3(delta, normal), delta * scale); + T4f liftDir = cross3(cross3(delta, normal), delta * scale); // sin(theta) * cos(theta) = 0.5 * sin(2 * theta) - Simd4f lift = liftCoefficient * cosTheta * sinTheta * liftDir; - Simd4f drag = dragCoefficient * abs(cosTheta) * doubleArea * delta; //dragCoefficient should compensate for double area + T4f lift = liftCoefficient * cosTheta * sinTheta * liftDir; + T4f drag = dragCoefficient * abs(cosTheta) * doubleArea * delta; //dragCoefficient should compensate for double area - Simd4f impulse = (lift + drag) & ~isZero; + T4f impulse = (lift + drag) & ~isZero; curIt[i0] = c0 - impulse * splat<3>(c0); curIt[i1] = c1 - impulse * splat<3>(c1); @@ -449,33 +449,33 @@ void applyWind(Simd4f* __restrict curIt, const Simd4f* __restrict prevIt, const } // anonymous namespace -template <typename Simd4f> -cloth::SwSolverKernel<Simd4f>::SwSolverKernel(SwCloth const& cloth, SwClothData& clothData, +template <typename T4f> +cloth::SwSolverKernel<T4f>::SwSolverKernel(SwCloth const& cloth, SwClothData& clothData, SwKernelAllocator& allocator, IterationStateFactory& factory) : mCloth(cloth) , mClothData(clothData) , mAllocator(allocator) , mCollision(clothData, allocator) , mSelfCollision(clothData, allocator) -, mState(factory.create<Simd4f>(cloth)) +, mState(factory.create<T4f>(cloth)) { mClothData.verify(); } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::operator()() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::operator()() { simulateCloth(); } -template <typename Simd4f> -size_t cloth::SwSolverKernel<Simd4f>::estimateTemporaryMemory(const SwCloth& cloth) +template <typename T4f> +size_t cloth::SwSolverKernel<T4f>::estimateTemporaryMemory(const SwCloth& cloth) { - size_t collisionTempMemory = SwCollision<Simd4f>::estimateTemporaryMemory(cloth); - size_t selfCollisionTempMemory = SwSelfCollision<Simd4f>::estimateTemporaryMemory(cloth); + size_t collisionTempMemory = SwCollision<T4f>::estimateTemporaryMemory(cloth); + size_t selfCollisionTempMemory = SwSelfCollision<T4f>::estimateTemporaryMemory(cloth); size_t tempMemory = std::max(collisionTempMemory, selfCollisionTempMemory); - size_t persistentMemory = SwCollision<Simd4f>::estimatePersistentMemory(cloth); + size_t persistentMemory = SwCollision<T4f>::estimatePersistentMemory(cloth); // account for any allocator overhead (this could be exposed in the allocator) size_t maxAllocs = 32; @@ -485,13 +485,13 @@ size_t cloth::SwSolverKernel<Simd4f>::estimateTemporaryMemory(const SwCloth& clo return maxAllocatorOverhead + persistentMemory + tempMemory; } -template <typename Simd4f> +template <typename T4f> template <typename AccelerationIterator> -void cloth::SwSolverKernel<Simd4f>::integrateParticles(AccelerationIterator& accelIt, const Simd4f& prevBias) +void cloth::SwSolverKernel<T4f>::integrateParticles(AccelerationIterator& accelIt, const T4f& prevBias) { - Simd4f* curIt = reinterpret_cast<Simd4f*>(mClothData.mCurParticles); - Simd4f* curEnd = curIt + mClothData.mNumParticles; - Simd4f* prevIt = reinterpret_cast<Simd4f*>(mClothData.mPrevParticles); + T4f* curIt = reinterpret_cast<T4f*>(mClothData.mCurParticles); + T4f* curEnd = curIt + mClothData.mNumParticles; + T4f* prevIt = reinterpret_cast<T4f*>(mClothData.mPrevParticles); if (!mState.mIsTurning) { @@ -504,32 +504,32 @@ void cloth::SwSolverKernel<Simd4f>::integrateParticles(AccelerationIterator& acc } } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::integrateParticles() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::integrateParticles() { NV_CLOTH_PROFILE_ZONE("cloth::SwSolverKernel::integrateParticles", /*ProfileContext::None*/ 0); - const Simd4f* startAccelIt = reinterpret_cast<const Simd4f*>(mClothData.mParticleAccelerations); + const T4f* startAccelIt = reinterpret_cast<const T4f*>(mClothData.mParticleAccelerations); // dt^2 (todo: should this be the smoothed dt used for gravity?) - const Simd4f sqrIterDt = simd4f(sqr(mState.mIterDt)) & static_cast<Simd4f>(sMaskXYZ); + const T4f sqrIterDt = simd4f(sqr(mState.mIterDt)) & static_cast<T4f>(sMaskXYZ); if (!startAccelIt) { // no per-particle accelerations, use a constant - ConstantIterator<Simd4f> accelIt(mState.mCurBias); + ConstantIterator<T4f> accelIt(mState.mCurBias); integrateParticles(accelIt, mState.mPrevBias); } else { // iterator implicitly scales by dt^2 and adds gravity - ScaleBiasIterator<Simd4f, const Simd4f*> accelIt(startAccelIt, sqrIterDt, mState.mCurBias); + ScaleBiasIterator<T4f, const T4f*> accelIt(startAccelIt, sqrIterDt, mState.mCurBias); integrateParticles(accelIt, mState.mPrevBias); } } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::constrainTether() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::constrainTether() { if (0.0f == mClothData.mTetherConstraintStiffness || !mClothData.mNumTethers) return; @@ -551,15 +551,15 @@ void cloth::SwSolverKernel<Simd4f>::constrainTether() TetherIter tEnd = tFirst + numTethers; //Tether properties - Simd4f stiffness = - static_cast<Simd4f>(sMaskXYZ) & simd4f(numParticles * mClothData.mTetherConstraintStiffness / numTethers); - Simd4f scale = simd4f(mClothData.mTetherConstraintScale); + T4f stiffness = + static_cast<T4f>(sMaskXYZ) & simd4f(numParticles * mClothData.mTetherConstraintStiffness / numTethers); + T4f scale = simd4f(mClothData.mTetherConstraintScale); //Loop through all particles for (; curIt != curEnd; curIt += 4, ++tFirst) { - Simd4f position = loadAligned(curIt); //Get the first particle - Simd4f offset = gSimd4fZero; //We accumulate the offset in this variable + T4f position = loadAligned(curIt); //Get the first particle + T4f offset = gSimd4fZero; //We accumulate the offset in this variable //Loop through all tethers connected to our particle for (TetherIter tIt = tFirst; tIt < tEnd; tIt += numParticles) @@ -567,15 +567,15 @@ void cloth::SwSolverKernel<Simd4f>::constrainTether() NV_CLOTH_ASSERT(tIt->mAnchor < numParticles); //Get the particle on the other end of the tether - Simd4f anchor = loadAligned(curFirst, tIt->mAnchor * sizeof(PxVec4)); - Simd4f delta = anchor - position; - Simd4f sqrLength = gSimd4fEpsilon + dot3(delta, delta); + T4f anchor = loadAligned(curFirst, tIt->mAnchor * sizeof(PxVec4)); + T4f delta = anchor - position; + T4f sqrLength = gSimd4fEpsilon + dot3(delta, delta); - Simd4f tetherLength = load(&tIt->mLength); + T4f tetherLength = load(&tIt->mLength); tetherLength = splat<0>(tetherLength); - Simd4f radius = tetherLength * scale; - Simd4f slack = gSimd4fOne - radius * rsqrt(sqrLength); + T4f radius = tetherLength * scale; + T4f slack = gSimd4fOne - radius * rsqrt(sqrLength); offset = offset + delta * max(slack, gSimd4fZero); } @@ -584,8 +584,8 @@ void cloth::SwSolverKernel<Simd4f>::constrainTether() } } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::solveFabric() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::solveFabric() { NV_CLOTH_PROFILE_ZONE("cloth::SwSolverKernel::solveFabric", /*ProfileContext::None*/ 0); @@ -604,7 +604,7 @@ void cloth::SwSolverKernel<Simd4f>::solveFabric() uint32_t totalConstraints = 0; - Simd4f stiffnessExponent = simd4f(mCloth.mStiffnessFrequency * mState.mIterDt); + T4f stiffnessExponent = simd4f(mCloth.mStiffnessFrequency * mState.mIterDt); //Loop through all phase configs for (; cIt != cEnd; ++cIt) @@ -623,10 +623,10 @@ void cloth::SwSolverKernel<Simd4f>::solveFabric() totalConstraints += uint32_t(rEnd - rIt); // (stiffness, multiplier, compressionLimit, stretchLimit) - Simd4f config = load(&cIt->mStiffness); + T4f config = load(&cIt->mStiffness); // stiffness specified as fraction of constraint error per-millisecond - Simd4f scaledConfig = gSimd4fOne - exp2(config * stiffnessExponent); - Simd4f stiffness = select(sMaskXY, scaledConfig, config); + T4f scaledConfig = gSimd4fOne - exp2(config * stiffnessExponent); + T4f stiffness = select(sMaskXY, scaledConfig, config); int neutralMultiplier = allEqual(sMaskYZW & stiffness, gSimd4fZero); @@ -654,22 +654,22 @@ void cloth::SwSolverKernel<Simd4f>::solveFabric() } } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::applyWind() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::applyWind() { if (mClothData.mDragCoefficient == 0.0f && mClothData.mLiftCoefficient == 0.0f) return; NV_CLOTH_PROFILE_ZONE("cloth::SwSolverKernel::applyWind", /*ProfileContext::None*/ 0); - Simd4f* curIt = reinterpret_cast<Simd4f*>(mClothData.mCurParticles); - Simd4f* prevIt = reinterpret_cast<Simd4f*>(mClothData.mPrevParticles); + T4f* curIt = reinterpret_cast<T4f*>(mClothData.mCurParticles); + T4f* prevIt = reinterpret_cast<T4f*>(mClothData.mPrevParticles); const uint16_t* tIt = mClothData.mTriangles; const uint16_t* tEnd = tIt + 3 * mClothData.mNumTriangles; - Simd4f dragCoefficient = simd4f(mClothData.mDragCoefficient); - Simd4f liftCoefficient = simd4f(mClothData.mLiftCoefficient); + T4f dragCoefficient = simd4f(mClothData.mDragCoefficient); + T4f liftCoefficient = simd4f(mClothData.mLiftCoefficient); if (mState.mIsTurning) { @@ -683,23 +683,23 @@ void cloth::SwSolverKernel<Simd4f>::applyWind() } } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::constrainMotion() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::constrainMotion() { if (!mClothData.mStartMotionConstraints) return; NV_CLOTH_PROFILE_ZONE("cloth::SwSolverKernel::constrainMotion", /*ProfileContext::None*/ 0); - Simd4f* curIt = reinterpret_cast<Simd4f*>(mClothData.mCurParticles); - Simd4f* curEnd = curIt + mClothData.mNumParticles; + T4f* curIt = reinterpret_cast<T4f*>(mClothData.mCurParticles); + T4f* curEnd = curIt + mClothData.mNumParticles; - const Simd4f* startIt = reinterpret_cast<const Simd4f*>(mClothData.mStartMotionConstraints); - const Simd4f* targetIt = reinterpret_cast<const Simd4f*>(mClothData.mTargetMotionConstraints); + const T4f* startIt = reinterpret_cast<const T4f*>(mClothData.mStartMotionConstraints); + const T4f* targetIt = reinterpret_cast<const T4f*>(mClothData.mTargetMotionConstraints); - Simd4f scaleBias = load(&mCloth.mMotionConstraintScale); - Simd4f stiffness = simd4f(mClothData.mMotionConstraintStiffness); - Simd4f scaleBiasStiffness = select(sMaskXYZ, scaleBias, stiffness); + T4f scaleBias = load(&mCloth.mMotionConstraintScale); + T4f stiffness = simd4f(mClothData.mMotionConstraintStiffness); + T4f scaleBiasStiffness = select(sMaskXYZ, scaleBias, stiffness); if (!mClothData.mTargetMotionConstraints) { @@ -714,23 +714,23 @@ void cloth::SwSolverKernel<Simd4f>::constrainMotion() } // otherwise use an interpolating iterator - LerpIterator<Simd4f, const Simd4f*> interpolator(startIt, targetIt, mState.getCurrentAlpha()); + LerpIterator<T4f, const T4f*> interpolator(startIt, targetIt, mState.getCurrentAlpha()); ::constrainMotion(curIt, curEnd, interpolator, scaleBiasStiffness); } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::constrainSeparation() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::constrainSeparation() { if (!mClothData.mStartSeparationConstraints) return; NV_CLOTH_PROFILE_ZONE("cloth::SwSolverKernel::constrainSeparation", /*ProfileContext::None*/ 0); - Simd4f* curIt = reinterpret_cast<Simd4f*>(mClothData.mCurParticles); - Simd4f* curEnd = curIt + mClothData.mNumParticles; + T4f* curIt = reinterpret_cast<T4f*>(mClothData.mCurParticles); + T4f* curEnd = curIt + mClothData.mNumParticles; - const Simd4f* startIt = reinterpret_cast<const Simd4f*>(mClothData.mStartSeparationConstraints); - const Simd4f* targetIt = reinterpret_cast<const Simd4f*>(mClothData.mTargetSeparationConstraints); + const T4f* startIt = reinterpret_cast<const T4f*>(mClothData.mStartSeparationConstraints); + const T4f* targetIt = reinterpret_cast<const T4f*>(mClothData.mTargetSeparationConstraints); if (!mClothData.mTargetSeparationConstraints) { @@ -744,43 +744,43 @@ void cloth::SwSolverKernel<Simd4f>::constrainSeparation() return ::constrainSeparation(curIt, curEnd, targetIt); } // otherwise use an interpolating iterator - LerpIterator<Simd4f, const Simd4f*> interpolator(startIt, targetIt, mState.getCurrentAlpha()); + LerpIterator<T4f, const T4f*> interpolator(startIt, targetIt, mState.getCurrentAlpha()); ::constrainSeparation(curIt, curEnd, interpolator); } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::collideParticles() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::collideParticles() { NV_CLOTH_PROFILE_ZONE("cloth::SwSolverKernel::collideParticles", /*ProfileContext::None*/ 0); mCollision(mState); } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::selfCollideParticles() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::selfCollideParticles() { NV_CLOTH_PROFILE_ZONE("cloth::SwSolverKernel::selfCollideParticles", /*ProfileContext::None*/ 0); mSelfCollision(); } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::updateSleepState() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::updateSleepState() { NV_CLOTH_PROFILE_ZONE("cloth::SwSolverKernel::updateSleepState", /*ProfileContext::None*/ 0); mClothData.mSleepTestCounter += std::max(1u, uint32_t(mState.mIterDt * 1000)); if (mClothData.mSleepTestCounter >= mCloth.mSleepTestInterval) { - const Simd4f* prevIt = reinterpret_cast<Simd4f*>(mClothData.mPrevParticles); - const Simd4f* curIt = reinterpret_cast<Simd4f*>(mClothData.mCurParticles); - const Simd4f* curEnd = curIt + mClothData.mNumParticles; + const T4f* prevIt = reinterpret_cast<T4f*>(mClothData.mPrevParticles); + const T4f* curIt = reinterpret_cast<T4f*>(mClothData.mCurParticles); + const T4f* curEnd = curIt + mClothData.mNumParticles; // calculate max particle delta since last iteration - Simd4f maxDelta = calculateMaxDelta(prevIt, curIt, curEnd); + T4f maxDelta = calculateMaxDelta(prevIt, curIt, curEnd); ++mClothData.mSleepPassCounter; - Simd4f threshold = simd4f(mCloth.mSleepThreshold * mState.mIterDt); + T4f threshold = simd4f(mCloth.mSleepThreshold * mState.mIterDt); if (anyGreaterEqual(maxDelta, threshold)) mClothData.mSleepPassCounter = 0; @@ -788,8 +788,8 @@ void cloth::SwSolverKernel<Simd4f>::updateSleepState() } } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::iterateCloth() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::iterateCloth() { // note on invMass (stored in current/previous positions.w): // integrateParticles() @@ -832,8 +832,8 @@ void cloth::SwSolverKernel<Simd4f>::iterateCloth() updateSleepState(); } -template <typename Simd4f> -void cloth::SwSolverKernel<Simd4f>::simulateCloth() +template <typename T4f> +void cloth::SwSolverKernel<T4f>::simulateCloth() { while (mState.mRemainingIterations) { diff --git a/NvCloth/src/SwSolverKernel.h b/NvCloth/src/SwSolverKernel.h index f71514d..a199691 100644 --- a/NvCloth/src/SwSolverKernel.h +++ b/NvCloth/src/SwSolverKernel.h @@ -41,7 +41,7 @@ namespace cloth class SwCloth; struct SwClothData; -template <typename Simd4f> +template <typename T4f> class SwSolverKernel { public: @@ -71,14 +71,23 @@ class SwSolverKernel SwClothData& mClothData; SwKernelAllocator& mAllocator; - SwCollision<Simd4f> mCollision; - SwSelfCollision<Simd4f> mSelfCollision; - IterationState<Simd4f> mState; + SwCollision<T4f> mCollision; + SwSelfCollision<T4f> mSelfCollision; + IterationState<T4f> mState; private: - SwSolverKernel<Simd4f>& operator = (const SwSolverKernel<Simd4f>&); + SwSolverKernel<T4f>& operator = (const SwSolverKernel<T4f>&); template <typename AccelerationIterator> - void integrateParticles(AccelerationIterator& accelIt, const Simd4f&); + void integrateParticles(AccelerationIterator& accelIt, const T4f&); }; + +//explicit template instantiation declaration +#if NV_SIMD_SIMD +extern template class SwSolverKernel<Simd4f>; +#endif +#if NV_SIMD_SCALAR +extern template class SwSolverKernel<Scalar4f>; +#endif + } } diff --git a/NvCloth/src/TripletScheduler.cpp b/NvCloth/src/TripletScheduler.cpp index e051131..999be0e 100644 --- a/NvCloth/src/TripletScheduler.cpp +++ b/NvCloth/src/TripletScheduler.cpp @@ -207,7 +207,10 @@ void cloth::TripletScheduler::warp(uint32_t numParticles, uint32_t warpWidth) numReplays += set.mNumReplays[i] == set.mNumConflicts[i][warpMask & (*tIt)[i]]; if (minReplays > numReplays) - minReplays = numReplays, bestIndex = setIndex; + { + minReplays = numReplays; + bestIndex = setIndex; + } } // add new set if none found diff --git a/NvCloth/src/cuda/CuCloth.cpp b/NvCloth/src/cuda/CuCloth.cpp index 93b2370..3e6175b 100644 --- a/NvCloth/src/cuda/CuCloth.cpp +++ b/NvCloth/src/cuda/CuCloth.cpp @@ -37,7 +37,6 @@ #include "../TripletScheduler.h" #include "../ClothBase.h" #include <foundation/PxMat44.h> -#include <PsFoundation.h> using namespace physx; @@ -215,7 +214,7 @@ uint32_t cloth::CuCloth::getSharedMemorySize() const return phaseConfigSize + sizeof(float) * (continuousCollisionSize + std::max(selfCollisionSize, discreteCollisionSize)); } -void cloth::CuCloth::setPhaseConfig(Range<const PhaseConfig> configs) +void cloth::CuCloth::setPhaseConfigInternal(Range<const PhaseConfig> configs) { mHostPhaseConfigs.assign(configs.begin(), configs.end()); @@ -317,69 +316,60 @@ namespace nv namespace cloth { -// ClothImpl<CuCloth>::clone() implemented in CuClothClone.cpp +// CuCloth::clone() implemented in CuClothClone.cpp -template <> -uint32_t ClothImpl<CuCloth>::getNumParticles() const +uint32_t CuCloth::getNumParticles() const { - return mCloth.mNumParticles; + return mNumParticles; } -template <> -void ClothImpl<CuCloth>::lockParticles() const +void CuCloth::lockParticles() const { - const_cast<CuCloth&>(mCloth).syncHostParticles(); + const_cast<CuCloth&>(*this).syncHostParticles(); } -template <> -void ClothImpl<CuCloth>::unlockParticles() const +void CuCloth::unlockParticles() const { } -template <> -MappedRange<PxVec4> ClothImpl<CuCloth>::getCurrentParticles() +MappedRange<PxVec4> CuCloth::getCurrentParticles() { - mCloth.wakeUp(); + wakeUp(); lockParticles(); - mCloth.mDeviceParticlesDirty = true; - return getMappedParticles(mCloth.mParticlesHostCopy.begin()); + mDeviceParticlesDirty = true; + return getMappedParticles(mParticlesHostCopy.begin()); } -template <> -MappedRange<const PxVec4> ClothImpl<CuCloth>::getCurrentParticles() const +MappedRange<const PxVec4> CuCloth::getCurrentParticles() const { lockParticles(); - return getMappedParticles(mCloth.mParticlesHostCopy.begin()); + return getMappedParticles(mParticlesHostCopy.begin()); } -template <> -MappedRange<PxVec4> ClothImpl<CuCloth>::getPreviousParticles() +MappedRange<PxVec4> CuCloth::getPreviousParticles() { - mCloth.wakeUp(); + wakeUp(); lockParticles(); - mCloth.mDeviceParticlesDirty = true; - return getMappedParticles(mCloth.mParticlesHostCopy.begin() + mCloth.mNumParticles); + mDeviceParticlesDirty = true; + return getMappedParticles(mParticlesHostCopy.begin() + mNumParticles); } -template <> -MappedRange<const PxVec4> ClothImpl<CuCloth>::getPreviousParticles() const +MappedRange<const PxVec4> CuCloth::getPreviousParticles() const { lockParticles(); - return getMappedParticles(mCloth.mParticlesHostCopy.begin() + mCloth.mNumParticles); + return getMappedParticles(mParticlesHostCopy.begin() + mNumParticles); } -template <> -GpuParticles ClothImpl<CuCloth>::getGpuParticles() +GpuParticles CuCloth::getGpuParticles() { - mCloth.syncDeviceParticles(); - mCloth.mHostParticlesDirty = true; - PxVec4* particles = mCloth.mParticles.begin().get(); - GpuParticles result = { particles, particles + mCloth.mNumParticles, 0 }; + syncDeviceParticles(); + mHostParticlesDirty = true; + PxVec4* particles = mParticles.begin().get(); + GpuParticles result = { particles, particles + mNumParticles, 0 }; return result; } -template <> -void ClothImpl<CuCloth>::setPhaseConfig(Range<const PhaseConfig> configs) +void CuCloth::setPhaseConfig(Range<const PhaseConfig> configs) { Vector<PhaseConfig>::Type transformedConfigs; transformedConfigs.reserve(configs.size()); @@ -389,56 +379,52 @@ void ClothImpl<CuCloth>::setPhaseConfig(Range<const PhaseConfig> configs) if (configs.front().mStiffness > 0.0f) transformedConfigs.pushBack(transform(configs.front())); - mCloth.setPhaseConfig(Range<const PhaseConfig>(transformedConfigs.begin(), transformedConfigs.end())); - mCloth.notifyChanged(); - mCloth.wakeUp(); + setPhaseConfigInternal(Range<const PhaseConfig>(transformedConfigs.begin(), transformedConfigs.end())); + notifyChanged(); + wakeUp(); } -template <> -void ClothImpl<CuCloth>::setSelfCollisionIndices(Range<const uint32_t> indices) +void CuCloth::setSelfCollisionIndices(Range<const uint32_t> indices) { - ContextLockType lock(mCloth.mFactory); - mCloth.mSelfCollisionIndices.assign(indices.begin(), indices.end()); - mCloth.mSelfCollisionIndicesHost.assign(indices.begin(), indices.end()); - mCloth.notifyChanged(); - mCloth.wakeUp(); + ContextLockType lock(mFactory); + mSelfCollisionIndices.assign(indices.begin(), indices.end()); + mSelfCollisionIndicesHost.assign(indices.begin(), indices.end()); + notifyChanged(); + wakeUp(); } -template <> -uint32_t ClothImpl<CuCloth>::getNumVirtualParticles() const +uint32_t CuCloth::getNumVirtualParticles() const { - return uint32_t(mCloth.mVirtualParticleIndices.size()); + return uint32_t(mVirtualParticleIndices.size()); } -template <> -Range<PxVec4> ClothImpl<CuCloth>::getParticleAccelerations() +Range<PxVec4> CuCloth::getParticleAccelerations() { - if (mCloth.mParticleAccelerations.empty()) + if (mParticleAccelerations.empty()) { - CuContextLock contextLock(mCloth.mFactory); - mCloth.mParticleAccelerations.resize(mCloth.mNumParticles); + CuContextLock contextLock(mFactory); + mParticleAccelerations.resize(mNumParticles); } - if (!mCloth.mParticleAccelerationsHostCopy.capacity()) + if (!mParticleAccelerationsHostCopy.capacity()) { - CuContextLock contextLock(mCloth.mFactory); - mCloth.mParticleAccelerationsHostCopy.reserve(mCloth.mNumParticles); + CuContextLock contextLock(mFactory); + mParticleAccelerationsHostCopy.reserve(mNumParticles); } - mCloth.mParticleAccelerationsHostCopy.resizeUninitialized(mCloth.mNumParticles); + mParticleAccelerationsHostCopy.resizeUninitialized(mNumParticles); - mCloth.wakeUp(); + wakeUp(); - PxVec4* data = mCloth.mParticleAccelerationsHostCopy.begin(); - return Range<PxVec4>(data, mCloth.mParticleAccelerationsHostCopy.end()); + PxVec4* data = mParticleAccelerationsHostCopy.begin(); + return Range<PxVec4>(data, mParticleAccelerationsHostCopy.end()); } -template <> -void ClothImpl<CuCloth>::clearParticleAccelerations() +void CuCloth::clearParticleAccelerations() { - CuContextLock contextLock(mCloth.mFactory); - CuDeviceVector<PxVec4>(mCloth.mFactory.mContext).swap(mCloth.mParticleAccelerations); - CuHostVector<PxVec4, CU_MEMHOSTALLOC_DEVICEMAP>::Type().swap(mCloth.mParticleAccelerationsHostCopy); - mCloth.wakeUp(); + CuContextLock contextLock(mFactory); + CuDeviceVector<PxVec4>(mFactory.mContext).swap(mParticleAccelerations); + CuHostVector<PxVec4, CU_MEMHOSTALLOC_DEVICEMAP>::Type().swap(mParticleAccelerationsHostCopy); + wakeUp(); } namespace @@ -469,12 +455,11 @@ namespace } } -template <> -void ClothImpl<CuCloth>::setVirtualParticles(Range<const uint32_t[4]> indices, Range<const PxVec3> weights) +void CuCloth::setVirtualParticles(Range<const uint32_t[4]> indices, Range<const PxVec3> weights) { // shuffle indices to form independent SIMD sets TripletScheduler scheduler(indices); - scheduler.warp(mCloth.mNumParticles, 32); + scheduler.warp(mNumParticles, 32); // convert to 16bit indices Vector<Vec4us>::Type hostIndices; @@ -497,15 +482,15 @@ void ClothImpl<CuCloth>::setVirtualParticles(Range<const uint32_t[4]> indices, R hostWeights.pushBack(PxVec4( w.x, w.y, w.z, scale )); } - CuContextLock contextLock(mCloth.mFactory); + CuContextLock contextLock(mFactory); // todo: 'swap' these to force reallocation? - mCloth.mVirtualParticleIndices = hostIndices; - mCloth.mVirtualParticleSetSizes = scheduler.mSetSizes; - mCloth.mVirtualParticleWeights = hostWeights; + mVirtualParticleIndices = hostIndices; + mVirtualParticleSetSizes = scheduler.mSetSizes; + mVirtualParticleWeights = hostWeights; - mCloth.notifyChanged(); - mCloth.wakeUp(); + notifyChanged(); + wakeUp(); } } // namespace cloth diff --git a/NvCloth/src/cuda/CuCloth.h b/NvCloth/src/cuda/CuCloth.h index 1f86343..8dc3082 100644 --- a/NvCloth/src/cuda/CuCloth.h +++ b/NvCloth/src/cuda/CuCloth.h @@ -43,6 +43,8 @@ #include <foundation/PxVec3.h> #include <foundation/PxTransform.h> #include "NvCloth/Allocator.h" +#include "ClothImpl.h" +#include "CuFactory.h" namespace nv { @@ -50,7 +52,6 @@ namespace cloth { class CuFabric; -class CuFactory; struct CuClothData; struct CuConstraints @@ -74,7 +75,18 @@ struct CuConstraints CuHostVector<physx::PxVec4, CU_MEMHOSTALLOC_DEVICEMAP>::Type mHostCopy; }; -class CuCloth : protected CuContextLock +class CuCloth; + +template<> +class ClothTraits<CuCloth> +{ +public: + typedef CuFactory FactoryType; + typedef CuFabric FabricType; + typedef CuContextLock ContextLockType; +}; + +class CuCloth : protected CuContextLock, public ClothImpl<CuCloth> { CuCloth(); // not implemented @@ -94,14 +106,24 @@ class CuCloth : protected CuContextLock ~CuCloth(); // not virtual on purpose public: - bool isSleeping() const - { - return mSleepPassCounter >= mSleepAfterCount; - } - void wakeUp() - { - mSleepPassCounter = 0; - } + virtual Cloth* clone(Factory& factory) const; + uint32_t getNumParticles() const; + + void lockParticles() const; + void unlockParticles() const; + + MappedRange<physx::PxVec4> getCurrentParticles(); + MappedRange<const physx::PxVec4> getCurrentParticles() const; + MappedRange<physx::PxVec4> getPreviousParticles(); + MappedRange<const physx::PxVec4> getPreviousParticles() const; + GpuParticles getGpuParticles(); + void setPhaseConfig(Range<const PhaseConfig> configs); + + void setSelfCollisionIndices(Range<const uint32_t> indices); + uint32_t getNumVirtualParticles() const; + Range<physx::PxVec4> getParticleAccelerations(); + void clearParticleAccelerations(); + void setVirtualParticles(Range<const uint32_t[4]> indices, Range<const physx::PxVec3> weights); void notifyChanged(); @@ -109,7 +131,7 @@ class CuCloth : protected CuContextLock uint32_t getSharedMemorySize() const; // without particle data // expects transformed configs, doesn't call notifyChanged() - void setPhaseConfig(Range<const PhaseConfig>); + void setPhaseConfigInternal(Range<const PhaseConfig>); Range<physx::PxVec4> push(CuConstraints&); void clear(CuConstraints&); @@ -133,27 +155,6 @@ class CuCloth : protected CuContextLock bool mDeviceParticlesDirty; bool mHostParticlesDirty; - physx::PxVec3 mParticleBoundsCenter; - physx::PxVec3 mParticleBoundsHalfExtent; - - physx::PxVec3 mGravity; - physx::PxVec3 mLogDamping; - physx::PxVec3 mLinearLogDrag; - physx::PxVec3 mAngularLogDrag; - physx::PxVec3 mLinearInertia; - physx::PxVec3 mAngularInertia; - physx::PxVec3 mCentrifugalInertia; - float mSolverFrequency; - float mStiffnessFrequency; - - physx::PxTransform mTargetMotion; - physx::PxTransform mCurrentMotion; - physx::PxVec3 mLinearVelocity; - physx::PxVec3 mAngularVelocity; - - float mPrevIterDt; - MovingAverage mIterDtAvg; - CuDeviceVector<CuPhaseConfig> mPhaseConfigs; // transformed! Vector<PhaseConfig>::Type mHostPhaseConfigs; // transformed! @@ -174,11 +175,6 @@ class CuCloth : protected CuContextLock CuDeviceVector<physx::PxVec4> mParticleAccelerations; CuHostVector<physx::PxVec4, CU_MEMHOSTALLOC_DEVICEMAP>::Type mParticleAccelerationsHostCopy; - // wind - physx::PxVec3 mWind; - float mDragLogCoefficient; - float mLiftLogCoefficient; - // collision stuff CuHostVector<IndexPair, CU_MEMHOSTALLOC_DEVICEMAP>::Type mCapsuleIndices; CuHostVector<physx::PxVec4, CU_MEMHOSTALLOC_DEVICEMAP>::Type mStartCollisionSpheres; @@ -208,13 +204,6 @@ class CuCloth : protected CuContextLock // 4 (position) + 2 (key) per particle + cellStart (8322) CuDeviceVector<float> mSelfCollisionData; - // sleeping (see SwCloth for comments) - uint32_t mSleepTestInterval; - uint32_t mSleepAfterCount; - float mSleepThreshold; - uint32_t mSleepPassCounter; - uint32_t mSleepTestCounter; - uint32_t mSharedMemorySize; void* mUserData; diff --git a/NvCloth/src/cuda/CuClothClone.cpp b/NvCloth/src/cuda/CuClothClone.cpp index df43c66..5dba4ec 100644 --- a/NvCloth/src/cuda/CuClothClone.cpp +++ b/NvCloth/src/cuda/CuClothClone.cpp @@ -56,11 +56,10 @@ Range<const uint32_t> getSelfCollisionIndices(const CuCloth& cloth) return makeRange(cloth.mSelfCollisionIndicesHost); } -template <> -Cloth* ClothImpl<CuCloth>::clone(Factory& factory) const +Cloth* CuCloth::clone(Factory& factory) const { - if (&mCloth.mFactory == &factory) - return NV_CLOTH_NEW(ClothImpl<CuCloth>)(factory, *this); // copy construct directly + if (&mFactory == &factory) + return NV_CLOTH_NEW(CuCloth)(mFactory, *this); // copy construct directly switch(factory.getPlatform()) { @@ -77,7 +76,7 @@ Cloth* ClothImpl<CuCloth>::clone(Factory& factory) const Cloth* CuFactory::clone(const Cloth& cloth) { if (cloth.getFactory().getPlatform() == Platform::CPU) - return convertCloth(*this, static_cast<const SwClothImpl&>(cloth)); + return convertCloth(*this, static_cast<const SwCloth&>(cloth)); return cloth.clone(*this); } diff --git a/NvCloth/src/cuda/CuFactory.cpp b/NvCloth/src/cuda/CuFactory.cpp index 460cebc..397262c 100644 --- a/NvCloth/src/cuda/CuFactory.cpp +++ b/NvCloth/src/cuda/CuFactory.cpp @@ -35,7 +35,6 @@ #include "CuCheckSuccess.h" #include "CuContextLock.h" #include <cuda.h> -#include <PsFoundation.h> #include "CuSolverKernelBlob.h" #if PX_VC @@ -155,7 +154,7 @@ cloth::Fabric* cloth::CuFactory::createFabric(uint32_t numParticles, Range<const cloth::Cloth* cloth::CuFactory::createCloth(Range<const PxVec4> particles, Fabric& fabric) { - return NV_CLOTH_NEW(CuClothImpl)(*this, fabric, particles); + return NV_CLOTH_NEW(CuCloth)(*this, static_cast<CuFabric&>(fabric), particles); } cloth::Solver* cloth::CuFactory::createSolver() @@ -255,7 +254,7 @@ void cloth::CuFactory::extractCollisionData(const Cloth& cloth, Range<PxVec4> sp { NV_CLOTH_ASSERT(&cloth.getFactory() == this); - const CuCloth& cuCloth = static_cast<const CuClothImpl&>(cloth).mCloth; + const CuCloth& cuCloth = static_cast<const CuCloth&>(cloth); NV_CLOTH_ASSERT(spheres.empty() || spheres.size() == cuCloth.mStartCollisionSpheres.size()); NV_CLOTH_ASSERT(capsules.empty() || capsules.size() == cuCloth.mCapsuleIndices.size() * 2); @@ -287,7 +286,7 @@ void cloth::CuFactory::extractMotionConstraints(const Cloth& cloth, Range<PxVec4 { NV_CLOTH_ASSERT(&cloth.getFactory() == this); - const CuCloth& cuCloth = static_cast<const CuClothImpl&>(cloth).mCloth; + const CuCloth& cuCloth = static_cast<const CuCloth&>(cloth); if (cuCloth.mMotionConstraints.mHostCopy.size()) { @@ -314,7 +313,7 @@ void cloth::CuFactory::extractSeparationConstraints(const Cloth& cloth, Range<Px { NV_CLOTH_ASSERT(&cloth.getFactory() == this); - const CuCloth& cuCloth = static_cast<const CuClothImpl&>(cloth).mCloth; + const CuCloth& cuCloth = static_cast<const CuCloth&>(cloth); if (cuCloth.mSeparationConstraints.mHostCopy.size()) { @@ -341,7 +340,7 @@ void cloth::CuFactory::extractParticleAccelerations(const Cloth& cloth, Range<Px { NV_CLOTH_ASSERT(&cloth.getFactory() == this); - const CuCloth& cuCloth = static_cast<const CuClothImpl&>(cloth).mCloth; + const CuCloth& cuCloth = static_cast<const CuCloth&>(cloth); if (cuCloth.mParticleAccelerationsHostCopy.size()) { @@ -359,7 +358,7 @@ void cloth::CuFactory::extractVirtualParticles(const Cloth& cloth, Range<uint32_ CuContextLock contextLock(*this); - const CuCloth& cuCloth = static_cast<const CuClothImpl&>(cloth).mCloth; + const CuCloth& cuCloth = static_cast<const CuCloth&>(cloth); if (destWeights.size() > 0) { @@ -400,7 +399,7 @@ void cloth::CuFactory::extractVirtualParticles(const Cloth& cloth, Range<uint32_ void cloth::CuFactory::extractSelfCollisionIndices(const Cloth& cloth, Range<uint32_t> destIndices) const { - const CuCloth& cuCloth = static_cast<const CuClothImpl&>(cloth).mCloth; + const CuCloth& cuCloth = static_cast<const CuCloth&>(cloth); NV_CLOTH_ASSERT(destIndices.size() == cuCloth.mSelfCollisionIndices.size()); copyToHost(cuCloth.mSelfCollisionIndices.begin().get(), cuCloth.mSelfCollisionIndices.end().get(), destIndices.begin()); @@ -408,7 +407,7 @@ void cloth::CuFactory::extractSelfCollisionIndices(const Cloth& cloth, Range<uin void cloth::CuFactory::extractRestPositions(const Cloth& cloth, Range<PxVec4> destRestPositions) const { - const CuCloth& cuCloth = static_cast<const CuClothImpl&>(cloth).mCloth; + const CuCloth& cuCloth = static_cast<const CuCloth&>(cloth); NV_CLOTH_ASSERT(destRestPositions.size() == cuCloth.mRestPositions.size()); copyToHost(cuCloth.mRestPositions.begin().get(), cuCloth.mRestPositions.end().get(), destRestPositions.begin()); } diff --git a/NvCloth/src/cuda/CuFactory.h b/NvCloth/src/cuda/CuFactory.h index 81799ec..3ff5752 100644 --- a/NvCloth/src/cuda/CuFactory.h +++ b/NvCloth/src/cuda/CuFactory.h @@ -52,7 +52,7 @@ class CuFactory : public Factory public: typedef CuFabric FabricType; - typedef ClothImpl<CuCloth> ImplType; + typedef CuCloth ClothType; CuFactory(CUcontext); virtual ~CuFactory(); diff --git a/NvCloth/src/cuda/CuSolver.cpp b/NvCloth/src/cuda/CuSolver.cpp index 7927a42..f0e328f 100644 --- a/NvCloth/src/cuda/CuSolver.cpp +++ b/NvCloth/src/cuda/CuSolver.cpp @@ -326,7 +326,7 @@ struct ClothSimCostGreater void cloth::CuSolver::addCloth(Cloth* cloth) { - CuCloth& cuCloth = static_cast<CuClothImpl&>(*cloth).mCloth; + CuCloth& cuCloth = *static_cast<CuCloth*>(cloth); NV_CLOTH_ASSERT(mCloths.find(&cuCloth) == mCloths.end()); @@ -348,7 +348,7 @@ void cloth::CuSolver::addCloth(Cloth* cloth) void cloth::CuSolver::removeCloth(Cloth* cloth) { - CuCloth& cuCloth = static_cast<CuClothImpl&>(*cloth).mCloth; + CuCloth& cuCloth = static_cast<CuCloth&>(*cloth); ClothVector::Iterator begin = mCloths.begin(), end = mCloths.end(); ClothVector::Iterator it = mCloths.find(&cuCloth); @@ -364,6 +364,18 @@ void cloth::CuSolver::removeCloth(Cloth* cloth) mClothDataDirty = true; } +int cloth::CuSolver::getNumCloths() const +{ + return mCloths.size(); +} +cloth::Cloth * const * cloth::CuSolver::getClothList() const +{ + if(getNumCloths()) + return reinterpret_cast<Cloth* const*>(&mCloths[0]); + else + return nullptr; +} + bool cloth::CuSolver::beginSimulation(float dt) { if (mCloths.empty()) diff --git a/NvCloth/src/cuda/CuSolver.h b/NvCloth/src/cuda/CuSolver.h index 8e256a7..0406e00 100644 --- a/NvCloth/src/cuda/CuSolver.h +++ b/NvCloth/src/cuda/CuSolver.h @@ -57,8 +57,10 @@ public: CuSolver(CuFactory&); ~CuSolver(); - virtual void addCloth(Cloth*); - virtual void removeCloth(Cloth*); + virtual void addCloth(Cloth*) override; + virtual void removeCloth(Cloth*) override; + virtual int getNumCloths() const override; + virtual Cloth * const * getClothList() const override; // functions executing the simulation work. virtual bool beginSimulation(float dt); diff --git a/NvCloth/src/dx/DxBatchedVector.h b/NvCloth/src/dx/DxBatchedVector.h index 674586e..2c5e313 100644 --- a/NvCloth/src/dx/DxBatchedVector.h +++ b/NvCloth/src/dx/DxBatchedVector.h @@ -225,7 +225,7 @@ class DxBatchedVector DxBatchedVector& operator = (const DxBatchedVector& other) { NV_CLOTH_ASSERT(mSize == other.size()); // current limitation - NV_CLOTH_ASSERT(!mStorage.mMapRefCount); + NV_CLOTH_ASSERT(!mStorage.mMapRefCount); // This will trigger if the user still has a reference to the MappedRange returned by Cloth::getCurrentParticles CD3D11_BOX box(other.mOffset * sizeof(T), 0, 0, (other.mOffset + other.size()) * sizeof(T), 1, 1); mStorage.mBuffer.context()->CopySubresourceRegion(buffer(), 0, mOffset * sizeof(T), 0, 0, other.buffer(), 0, diff --git a/NvCloth/src/dx/DxCloth.cpp b/NvCloth/src/dx/DxCloth.cpp index f87943e..68c3289 100644 --- a/NvCloth/src/dx/DxCloth.cpp +++ b/NvCloth/src/dx/DxCloth.cpp @@ -36,7 +36,6 @@ #include "../TripletScheduler.h" #include "../ClothBase.h" #include <foundation/PxMat44.h> -#include <PsFoundation.h> #if NV_CLOTH_ENABLE_DX11 @@ -224,7 +223,7 @@ uint32_t cloth::DxCloth::getSharedMemorySize() const return phaseConfigSize + sizeof(float) * (continuousCollisionSize + std::max(selfCollisionSize, discreteCollisionSize)); } -void cloth::DxCloth::setPhaseConfig(Range<const PhaseConfig> configs) +void cloth::DxCloth::setPhaseConfigInternal(Range<const PhaseConfig> configs) { mHostPhaseConfigs.assign(configs.begin(), configs.end()); @@ -332,71 +331,62 @@ namespace nv namespace cloth { -// ClothImpl<DxCloth>::clone() implemented in DxClothClone.cpp +// DxCloth::clone() implemented in DxClothClone.cpp -template <> -uint32_t ClothImpl<DxCloth>::getNumParticles() const +uint32_t DxCloth::getNumParticles() const { - return mCloth.mNumParticles; + return mNumParticles; } -template <> -void ClothImpl<DxCloth>::lockParticles() const +void DxCloth::lockParticles() const { - const_cast<DxCloth&>(mCloth).mapParticles(); + const_cast<DxCloth&>(*this).mapParticles(); } -template <> -void ClothImpl<DxCloth>::unlockParticles() const +void DxCloth::unlockParticles() const { - const_cast<DxCloth&>(mCloth).unmapParticles(); + const_cast<DxCloth&>(*this).unmapParticles(); } -template <> -MappedRange<PxVec4> ClothImpl<DxCloth>::getCurrentParticles() +MappedRange<PxVec4> DxCloth::getCurrentParticles() { - mCloth.wakeUp(); + wakeUp(); lockParticles(); - mCloth.mDeviceParticlesDirty = true; - return getMappedParticles(mCloth.mParticlesMapPointer); + mDeviceParticlesDirty = true; + return getMappedParticles(mParticlesMapPointer); } -template <> -MappedRange<const PxVec4> ClothImpl<DxCloth>::getCurrentParticles() const +MappedRange<const PxVec4> DxCloth::getCurrentParticles() const { lockParticles(); - const PxVec4* data = mCloth.mParticlesMapPointer; + const PxVec4* data = mParticlesMapPointer; return getMappedParticles(data); } -template <> -MappedRange<PxVec4> ClothImpl<DxCloth>::getPreviousParticles() +MappedRange<PxVec4> DxCloth::getPreviousParticles() { - mCloth.wakeUp(); + wakeUp(); lockParticles(); - mCloth.mDeviceParticlesDirty = true; - return getMappedParticles(mCloth.mParticlesMapPointer + mCloth.mNumParticles); + mDeviceParticlesDirty = true; + return getMappedParticles(mParticlesMapPointer + mNumParticles); } -template <> -MappedRange<const PxVec4> ClothImpl<DxCloth>::getPreviousParticles() const +MappedRange<const PxVec4> DxCloth::getPreviousParticles() const { lockParticles(); - const PxVec4* data = (const PxVec4*)mCloth.mParticlesMapPointer; - return getMappedParticles(data + mCloth.mNumParticles); + const PxVec4* data = (const PxVec4*)mParticlesMapPointer; + return getMappedParticles(data + mNumParticles); } -template <> -GpuParticles ClothImpl<DxCloth>::getGpuParticles() +GpuParticles DxCloth::getGpuParticles() { - ID3D11Buffer* buffer = mCloth.mParticles.buffer(); - PxVec4* offset = (PxVec4*)nullptr + mCloth.mParticles.mOffset; - GpuParticles result = { offset, offset + mCloth.mNumParticles, buffer }; + ID3D11Buffer* buffer = mParticles.buffer(); + PxVec4* offset = (PxVec4*)nullptr + mParticles.mOffset; + GpuParticles result = { offset, offset + mNumParticles, buffer }; return result; } -template <> -void ClothImpl<DxCloth>::setPhaseConfig(Range<const PhaseConfig> configs) +void DxCloth::setPhaseConfig(Range<const PhaseConfig> configs) { Vector<PhaseConfig>::Type transformedConfigs; transformedConfigs.reserve(configs.size()); @@ -406,57 +396,53 @@ void ClothImpl<DxCloth>::setPhaseConfig(Range<const PhaseConfig> configs) if (configs.front().mStiffness > 0.0f) transformedConfigs.pushBack(transform(configs.front())); - mCloth.setPhaseConfig(Range<const PhaseConfig>(transformedConfigs.begin(), + setPhaseConfigInternal(Range<const PhaseConfig>(transformedConfigs.begin(), transformedConfigs.begin() + transformedConfigs.size())); - mCloth.notifyChanged(); - mCloth.wakeUp(); + notifyChanged(); + wakeUp(); } -template <> -void ClothImpl<DxCloth>::setSelfCollisionIndices(Range<const uint32_t> indices) +void DxCloth::setSelfCollisionIndices(Range<const uint32_t> indices) { - ContextLockType lock(mCloth.mFactory); - mCloth.mSelfCollisionIndices.assign(indices.begin(), indices.end()); - mCloth.mSelfCollisionIndicesHost.assign(indices.begin(), indices.end()); - mCloth.notifyChanged(); - mCloth.wakeUp(); + ContextLockType lock(mFactory); + mSelfCollisionIndices.assign(indices.begin(), indices.end()); + mSelfCollisionIndicesHost.assign(indices.begin(), indices.end()); + notifyChanged(); + wakeUp(); } -template <> -uint32_t ClothImpl<DxCloth>::getNumVirtualParticles() const +uint32_t DxCloth::getNumVirtualParticles() const { - return uint32_t(mCloth.mVirtualParticleIndices.size()); + return uint32_t(mVirtualParticleIndices.size()); } -template <> -Range<PxVec4> ClothImpl<DxCloth>::getParticleAccelerations() +Range<PxVec4> DxCloth::getParticleAccelerations() { - if (mCloth.mParticleAccelerations.empty()) + if (mParticleAccelerations.empty()) { - DxContextLock contextLock(mCloth.mFactory); - mCloth.mParticleAccelerations.resize(mCloth.mNumParticles); + DxContextLock contextLock(mFactory); + mParticleAccelerations.resize(mNumParticles); } - if (!mCloth.mParticleAccelerationsHostCopy.capacity()) + if (!mParticleAccelerationsHostCopy.capacity()) { - DxContextLock contextLock(mCloth.mFactory); - mCloth.mParticleAccelerationsHostCopy.reserve(mCloth.mNumParticles); + DxContextLock contextLock(mFactory); + mParticleAccelerationsHostCopy.reserve(mNumParticles); } - mCloth.mParticleAccelerationsHostCopy.resizeUninitialized(mCloth.mNumParticles); + mParticleAccelerationsHostCopy.resizeUninitialized(mNumParticles); - mCloth.wakeUp(); + wakeUp(); - PxVec4* data = mCloth.mParticleAccelerationsHostCopy.begin(); - return Range<PxVec4>(data, mCloth.mParticleAccelerationsHostCopy.end()); + PxVec4* data = mParticleAccelerationsHostCopy.begin(); + return Range<PxVec4>(data, mParticleAccelerationsHostCopy.end()); } -template <> -void ClothImpl<DxCloth>::clearParticleAccelerations() +void DxCloth::clearParticleAccelerations() { - DxContextLock contextLock(mCloth.mFactory); - mCloth.mParticleAccelerations.clear(); - Vector<PxVec4>::Type().swap(mCloth.mParticleAccelerationsHostCopy); - mCloth.wakeUp(); + DxContextLock contextLock(mFactory); + mParticleAccelerations.clear(); + Vector<PxVec4>::Type().swap(mParticleAccelerationsHostCopy); + wakeUp(); } namespace @@ -488,12 +474,11 @@ uint32_t calculateNumReplays(const Vector<Vec4u>::Type& triplets, const Vector<u } } -template <> -void ClothImpl<DxCloth>::setVirtualParticles(Range<const uint32_t[4]> indices, Range<const PxVec3> weights) +void DxCloth::setVirtualParticles(Range<const uint32_t[4]> indices, Range<const PxVec3> weights) { // shuffle indices to form independent SIMD sets TripletScheduler scheduler(indices); - scheduler.warp(mCloth.mNumParticles, 32); + scheduler.warp(mNumParticles, 32); // convert to 16bit indices Vector<Vec4us>::Type hostIndices; @@ -516,15 +501,15 @@ void ClothImpl<DxCloth>::setVirtualParticles(Range<const uint32_t[4]> indices, R hostWeights.pushBack(PxVec4(w.x, w.y, w.z, scale)); } - DxContextLock contextLock(mCloth.mFactory); + DxContextLock contextLock(mFactory); // todo: 'swap' these to force reallocation? - mCloth.mVirtualParticleIndices = hostIndices; - mCloth.mVirtualParticleSetSizes = scheduler.mSetSizes; - mCloth.mVirtualParticleWeights = hostWeights; + mVirtualParticleIndices = hostIndices; + mVirtualParticleSetSizes = scheduler.mSetSizes; + mVirtualParticleWeights = hostWeights; - mCloth.notifyChanged(); - mCloth.wakeUp(); + notifyChanged(); + wakeUp(); } } // namespace cloth diff --git a/NvCloth/src/dx/DxCloth.h b/NvCloth/src/dx/DxCloth.h index bde2bd6..5e783fa 100644 --- a/NvCloth/src/dx/DxCloth.h +++ b/NvCloth/src/dx/DxCloth.h @@ -40,14 +40,15 @@ #include <foundation/PxVec4.h> #include <foundation/PxVec3.h> #include <foundation/PxTransform.h> +#include "DxFactory.h" +#include "DxFabric.h" +#include "ClothImpl.h" namespace nv { namespace cloth { -class DxFabric; -class DxFactory; struct DxClothData; struct DxConstraints @@ -71,7 +72,16 @@ struct DxConstraints Vector<physx::PxVec4>::Type mHostCopy; }; -class DxCloth : protected DxContextLock +template<> +class ClothTraits<DxCloth> +{ +public: + typedef DxFactory FactoryType; + typedef DxFabric FabricType; + typedef DxContextLock ContextLockType; +}; + +class DxCloth : protected DxContextLock, public ClothImpl<DxCloth> { DxCloth(const DxCloth&); // not implemented DxCloth& operator = (const DxCloth&); // not implemented @@ -94,14 +104,24 @@ class DxCloth : protected DxContextLock ~DxCloth(); // not virtual on purpose public: - bool isSleeping() const - { - return mSleepPassCounter >= mSleepAfterCount; - } - void wakeUp() - { - mSleepPassCounter = 0; - } + virtual Cloth* clone(Factory& factory) const; + uint32_t getNumParticles() const; + + void lockParticles() const; + void unlockParticles() const; + + MappedRange<physx::PxVec4> getCurrentParticles(); + MappedRange<const physx::PxVec4> getCurrentParticles() const; + MappedRange<physx::PxVec4> getPreviousParticles(); + MappedRange<const physx::PxVec4> getPreviousParticles() const; + GpuParticles getGpuParticles(); + + void setPhaseConfig(Range<const PhaseConfig> configs); + void setSelfCollisionIndices(Range<const uint32_t> indices); + uint32_t getNumVirtualParticles() const; + Range<physx::PxVec4> getParticleAccelerations(); + void clearParticleAccelerations(); + void setVirtualParticles(Range<const uint32_t[4]> indices, Range<const physx::PxVec3> weights); void notifyChanged(); @@ -109,7 +129,7 @@ class DxCloth : protected DxContextLock uint32_t getSharedMemorySize() const; // without particle data // expects transformed configs, doesn't call notifyChanged() - void setPhaseConfig(Range<const PhaseConfig>); + void setPhaseConfigInternal(Range<const PhaseConfig>); Range<physx::PxVec4> push(DxConstraints&); void clear(DxConstraints&); @@ -136,27 +156,6 @@ class DxCloth : protected DxContextLock bool mDeviceParticlesDirty; bool mHostParticlesDirty; - physx::PxVec3 mParticleBoundsCenter; - physx::PxVec3 mParticleBoundsHalfExtent; - - physx::PxVec3 mGravity; - physx::PxVec3 mLogDamping; - physx::PxVec3 mLinearLogDrag; - physx::PxVec3 mAngularLogDrag; - physx::PxVec3 mLinearInertia; - physx::PxVec3 mAngularInertia; - physx::PxVec3 mCentrifugalInertia; - float mSolverFrequency; - float mStiffnessFrequency; - - physx::PxTransform mTargetMotion; - physx::PxTransform mCurrentMotion; - physx::PxVec3 mLinearVelocity; - physx::PxVec3 mAngularVelocity; - - float mPrevIterDt; - MovingAverage mIterDtAvg; - DxBatchedVector<DxPhaseConfig> mPhaseConfigs; Vector<PhaseConfig>::Type mHostPhaseConfigs; @@ -177,11 +176,6 @@ class DxCloth : protected DxContextLock DxBatchedVector<physx::PxVec4> mParticleAccelerations; Vector<physx::PxVec4>::Type mParticleAccelerationsHostCopy; - // wind - physx::PxVec3 mWind; - float mDragLogCoefficient; - float mLiftLogCoefficient; - // collision stuff DxBatchedVector<IndexPair> mCapsuleIndices; DxBatchedVector<physx::PxVec4> mStartCollisionSpheres; @@ -214,13 +208,6 @@ class DxCloth : protected DxContextLock bool mInitSelfCollisionData; - // sleeping - uint32_t mSleepTestInterval; // how often to test for movement - uint32_t mSleepAfterCount; // number of tests to pass before sleep - float mSleepThreshold; // max movement delta to pass test - uint32_t mSleepPassCounter; // how many tests passed - uint32_t mSleepTestCounter; // how many iterations since tested - uint32_t mSharedMemorySize; void* mUserData; diff --git a/NvCloth/src/dx/DxClothClone.cpp b/NvCloth/src/dx/DxClothClone.cpp index 3f41cdc..77ba96a 100644 --- a/NvCloth/src/dx/DxClothClone.cpp +++ b/NvCloth/src/dx/DxClothClone.cpp @@ -58,11 +58,10 @@ Range<const uint32_t> getSelfCollisionIndices(const DxCloth& cloth) return makeRange(cloth.mSelfCollisionIndicesHost); } -template <> -Cloth* ClothImpl<DxCloth>::clone(Factory& factory) const +Cloth* DxCloth::clone(Factory& factory) const { - if (&mCloth.mFactory == &factory) - return NV_CLOTH_NEW(ClothImpl<DxCloth>)(factory, *this); // copy construct directly + if (&mFactory == &factory) + return NV_CLOTH_NEW(DxCloth)(mFactory, *this); // copy construct directly switch(factory.getPlatform()) { @@ -82,7 +81,7 @@ Cloth* DxFactory::clone(const Cloth& cloth) { if (cloth.getNumParticles() > 2025 /* see DxSolverKernel.hlsl gCurParticles */) return nullptr; // can only fit 2025 particles in dx shared memory - return convertCloth(*this, static_cast<const SwClothImpl&>(cloth)); + return convertCloth(*this, static_cast<const SwCloth&>(cloth)); } return cloth.clone(*this); diff --git a/NvCloth/src/dx/DxClothData.cpp b/NvCloth/src/dx/DxClothData.cpp index 2625eac..075dc81 100644 --- a/NvCloth/src/dx/DxClothData.cpp +++ b/NvCloth/src/dx/DxClothData.cpp @@ -51,6 +51,9 @@ cloth::DxClothData::DxClothData(DxCloth& cloth) mConstraintOffset = cloth.mFabric.mConstraints.mOffset; mStiffnessOffset = cloth.mFabric.mStiffnessValues.empty() ? -1: cloth.mFabric.mStiffnessValues.mOffset; + mNumTriangles = cloth.mFabric.getNumTriangles(); + mStartTriangleOffset = cloth.mFabric.mTriangles.mOffset; + mNumTethers = cloth.mFabric.mTethers.size(); mTetherOffset = cloth.mFabric.mTethers.mOffset; mTetherConstraintScale = cloth.mTetherConstraintScale * cloth.mFabric.mTetherLengthScale; @@ -94,14 +97,24 @@ cloth::DxFrameData::DxFrameData(DxCloth& cloth, uint32_t numSharedPositions, con mFirstIteration = firstIteration; mNumIterations = state.mRemainingIterations; - Simd4f logStiffness = simd4f(0.0f, cloth.mSelfCollisionLogStiffness, cloth.mMotionConstraintLogStiffness, - cloth.mTetherConstraintLogStiffness); Simd4f stiffnessExponent = simd4f(cloth.mStiffnessFrequency * mIterDt); - Simd4f stiffness = gSimd4fOne - exp2(logStiffness * stiffnessExponent); + { + Simd4f logStiffness = simd4f(0.0f, cloth.mSelfCollisionLogStiffness, cloth.mMotionConstraintLogStiffness, + cloth.mTetherConstraintLogStiffness); + Simd4f stiffness = gSimd4fOne - exp2(logStiffness * stiffnessExponent); - mTetherConstraintStiffness = array(stiffness)[3]; - mMotionConstraintStiffness = array(stiffness)[2]; - mSelfCollisionStiffness = array(stiffness)[1]; + mTetherConstraintStiffness = array(stiffness)[3]; + mMotionConstraintStiffness = array(stiffness)[2]; + mSelfCollisionStiffness = array(stiffness)[1]; + } + { + Simd4f logStiffness = simd4f(cloth.mDragLogCoefficient, cloth.mLiftLogCoefficient, 0.0f, 0.0f); + Simd4f stiffness = gSimd4fOne - exp2(logStiffness * stiffnessExponent); + mDragCoefficient = array(stiffness)[0]; + mLiftCoefficient = array(stiffness)[1]; + for(int i = 0; i < 9; ++i) + mRotation[i] = array(state.mRotationMatrix[i / 3])[i % 3]; + } mStartSphereOffset = cloth.mStartCollisionSpheres.mOffset; mTargetSphereOffset = @@ -111,7 +124,6 @@ cloth::DxFrameData::DxFrameData(DxCloth& cloth, uint32_t numSharedPositions, con mTargetCollisionPlaneOffset = cloth.mTargetCollisionPlanes.empty() ? mStartCollisionPlaneOffset : cloth.mTargetCollisionPlanes.mOffset; - mStartCollisionTrianglesOffset = cloth.mStartCollisionTriangles.mOffset; mTargetCollisionTrianglesOffset = cloth.mTargetCollisionTriangles.empty() ? mStartCollisionTrianglesOffset : cloth.mTargetCollisionTriangles.mOffset; @@ -172,6 +184,10 @@ cloth::DxIterationData::DxIterationData(const IterationState<Simd4f>& state) copySquareTransposed(mIntegrationTrafo + 15, array(*state.mCurMatrix)); mIsTurning = uint32_t(state.mIsTurning); + + mWind[0] = array(state.mWind)[0]; + mWind[1] = array(state.mWind)[1]; + mWind[2] = array(state.mWind)[2]; } #endif // NV_CLOTH_ENABLE_DX11 diff --git a/NvCloth/src/dx/DxClothData.h b/NvCloth/src/dx/DxClothData.h index bac1a98..af02bc6 100644 --- a/NvCloth/src/dx/DxClothData.h +++ b/NvCloth/src/dx/DxClothData.h @@ -46,7 +46,7 @@ typedef unsigned int uint32_t; typedef int int32_t; #endif -static const uint32_t MaxParticlesInSharedMem = 1975; +static const uint32_t MaxParticlesInSharedMem = 1972; struct DxPhaseConfig @@ -106,6 +106,9 @@ struct DxClothData uint32_t mTetherOffset; float mTetherConstraintScale; + uint32_t mNumTriangles; + uint32_t mStartTriangleOffset; + // motion constraint data float mMotionConstraintScale; float mMotionConstraintBias; @@ -161,6 +164,11 @@ struct DxFrameData float mTetherConstraintStiffness; + // wind data + float mDragCoefficient; + float mLiftCoefficient; + float mRotation[9]; + // motion constraint data float mMotionConstraintStiffness; uint32_t mStartMotionConstrainsOffset; @@ -206,6 +214,7 @@ struct DxIterationData explicit DxIterationData(const IterationState<Simd4f>&); #endif float mIntegrationTrafo[24]; + float mWind[3]; uint32_t mIsTurning; }; diff --git a/NvCloth/src/dx/DxDeviceVector.h b/NvCloth/src/dx/DxDeviceVector.h index d64bd77..17b7d6e 100644 --- a/NvCloth/src/dx/DxDeviceVector.h +++ b/NvCloth/src/dx/DxDeviceVector.h @@ -44,6 +44,8 @@ struct DxBufferFlags D3D11_BIND_FLAG mBindFlag; D3D11_RESOURCE_MISC_FLAG mMiscFlag; D3D11_CPU_ACCESS_FLAG mCpuAccessFlag; + + bool isRawBuffer() { return (mMiscFlag & D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS) != 0; } }; inline DxBufferFlags DxDefaultBufferPolicy() @@ -55,6 +57,15 @@ inline DxBufferFlags DxDefaultBufferPolicy() return result; }; +inline DxBufferFlags DxDefaultRawBufferPolicy() +{ + DxBufferFlags result = {D3D11_USAGE_DEFAULT, + D3D11_BIND_FLAG(D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_UNORDERED_ACCESS), + D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, + D3D11_CPU_ACCESS_FLAG(0)}; + return result; +}; + inline DxBufferFlags DxDynamicBufferPolicy() { DxBufferFlags result = { D3D11_USAGE_DYNAMIC, D3D11_BIND_SHADER_RESOURCE, @@ -78,20 +89,20 @@ class DxBuffer : public DxBufferFlags public: DxBuffer(DxContextManagerCallback* manager, const DxBufferFlags& flags = DxDefaultBufferPolicy()) - : DxBufferFlags(flags), mCapacity(0), mBuffer(0), mManager(manager), mResourceView(nullptr), mAccessView(nullptr) + : DxBufferFlags(flags), mCapacity(0), mBuffer(0), mManager(manager), mResourceView(nullptr), mAccessView(nullptr), mAccessRawView(nullptr) { } DxBuffer(const T* first, const T* last, DxContextManagerCallback* manager, const DxBufferFlags& flags = DxDefaultBufferPolicy()) - : DxBufferFlags(flags), mCapacity(0), mBuffer(0), mManager(manager), mResourceView(nullptr), mAccessView(nullptr) + : DxBufferFlags(flags), mCapacity(0), mBuffer(0), mManager(manager), mResourceView(nullptr), mAccessView(nullptr), mAccessRawView(nullptr) { D3D11_SUBRESOURCE_DATA data = { first }; create(uint32_t(last - first), &data); } DxBuffer(const DxBuffer& other) - : DxBufferFlags(other), mCapacity(0), mBuffer(0), mManager(other.mManager), mResourceView(nullptr), mAccessView(nullptr) + : DxBufferFlags(other), mCapacity(0), mBuffer(0), mManager(other.mManager), mResourceView(nullptr), mAccessView(nullptr), mAccessRawView(nullptr) { operator=(other); } @@ -100,6 +111,8 @@ class DxBuffer : public DxBufferFlags { if (mAccessView) mAccessView->Release(); + if(mAccessRawView) + mAccessRawView->Release(); if (mResourceView) mResourceView->Release(); if (mBuffer) @@ -173,10 +186,28 @@ class DxBuffer : public DxBufferFlags return mAccessView; } + ID3D11UnorderedAccessView* accessViewRaw() + { + if(!mAccessRawView && mBuffer) + { + D3D11_BUFFER_UAV buffuav; + buffuav.FirstElement = 0; + buffuav.NumElements = (mCapacity * SizeOfT)>>2; + buffuav.Flags = D3D11_BUFFER_UAV_FLAG_RAW; + + D3D11_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_R32_TYPELESS; + desc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER; + desc.Buffer = buffuav; + mManager->getDevice()->CreateUnorderedAccessView(mBuffer, &desc, &mAccessRawView); + } + return mAccessRawView; + } + private: void create(uint32_t capacity, D3D11_SUBRESOURCE_DATA* data = 0) { - CD3D11_BUFFER_DESC desc(capacity * SizeOfT, mBindFlag, mUsage, mCpuAccessFlag, mMiscFlag, SizeOfT); + CD3D11_BUFFER_DESC desc(capacity * SizeOfT, mBindFlag, mUsage, mCpuAccessFlag, mMiscFlag, isRawBuffer()?0:SizeOfT); checkSuccess(mManager->getDevice()->CreateBuffer(&desc, data, &mBuffer)); mCapacity = capacity; @@ -187,6 +218,10 @@ class DxBuffer : public DxBufferFlags if (mAccessView) mAccessView->Release(); mAccessView = nullptr; + + if(mAccessRawView) + mAccessRawView->Release(); + mAccessRawView = nullptr; } public: @@ -195,6 +230,7 @@ class DxBuffer : public DxBufferFlags DxContextManagerCallback* mManager; ID3D11ShaderResourceView* mResourceView; ID3D11UnorderedAccessView* mAccessView; + ID3D11UnorderedAccessView* mAccessRawView; }; // STL-style vector that holds POD types in DX device memory. The interface @@ -383,6 +419,7 @@ void swap(nv::cloth::DxBuffer<T>& left, nv::cloth::DxBuffer<T>& right) swap(left.mManager, right.mManager); swap(left.mResourceView, right.mResourceView); swap(left.mAccessView, right.mAccessView); + swap(left.mAccessRawView, right.mAccessRawView); } } } diff --git a/NvCloth/src/dx/DxFabric.cpp b/NvCloth/src/dx/DxFabric.cpp index 4952e80..56b2b0a 100644 --- a/NvCloth/src/dx/DxFabric.cpp +++ b/NvCloth/src/dx/DxFabric.cpp @@ -49,6 +49,7 @@ cloth::DxFabric::DxFabric(DxFactory& factory, uint32_t numParticles, Range<const , mSets(sets.begin(), sets.end()) , mConstraints(mFactory.mConstraints) , mConstraintsHostCopy(mFactory.mConstraintsHostCopy) +, mTriangles(mFactory.mTriangles) , mStiffnessValues(mFactory.mStiffnessValues) , mTethers(mFactory.mTethers) , mId(id) @@ -114,12 +115,20 @@ cloth::DxFabric::DxFabric(DxFactory& factory, uint32_t numParticles, Range<const mTethers.assign(tethers.begin(), tethers.end()); // triangles - Vector<uint16_t>::Type hostTriangles; - hostTriangles.resizeUninitialized(triangles.size()); - Vector<uint16_t>::Type::Iterator tIt = hostTriangles.begin(); + Vector<uint32_t>::Type hostTriangles; + mNumTriangles = triangles.size(); + //make sure there is an even number of elements allocated + hostTriangles.resizeUninitialized(triangles.size()>>1); + Vector<uint32_t>::Type::Iterator tIt = hostTriangles.begin(); for (; !triangles.empty(); triangles.popFront()) - *tIt++ = uint16_t(triangles.front()); + { + uint32_t packed = triangles.front(); + triangles.popFront(); + if(!triangles.empty()) + packed |= triangles.front()<<16; + *tIt++ = packed; + } mTriangles.assign(hostTriangles.begin(), hostTriangles.end()); @@ -181,7 +190,7 @@ uint32_t cloth::DxFabric::getNumTethers() const uint32_t cloth::DxFabric::getNumTriangles() const { - return uint32_t(mTriangles.size()) / 3; + return uint32_t(mNumTriangles) / 3; } void cloth::DxFabric::scaleRestvalues(float scale) diff --git a/NvCloth/src/dx/DxFabric.h b/NvCloth/src/dx/DxFabric.h index 2e64cee..6bc5b07 100644 --- a/NvCloth/src/dx/DxFabric.h +++ b/NvCloth/src/dx/DxFabric.h @@ -85,7 +85,8 @@ public: DxBatchedVector<DxTether> mTethers; float mTetherLengthScale; - Vector<uint16_t>::Type mTriangles; + DxBatchedVector<uint32_t> mTriangles; //data stored is actually uint16_t + int mNumTriangles; Vector<uint32_t>::Type mFirstConstraintInPhase; Vector<uint32_t>::Type mNumConstraintsInPhase; diff --git a/NvCloth/src/dx/DxFactory.cpp b/NvCloth/src/dx/DxFactory.cpp index 0ab7129..fbf0c51 100644 --- a/NvCloth/src/dx/DxFactory.cpp +++ b/NvCloth/src/dx/DxFactory.cpp @@ -35,7 +35,6 @@ #include "DxCheckSuccess.h" #include "DxContextLock.h" #include "../ClothImpl.h" -#include <PsFoundation.h> #if NV_CLOTH_ENABLE_DX11 @@ -82,7 +81,7 @@ typedef Vec4T<uint32_t> Vec4u; , mConstraintsHostCopy(mContextManager, DxStagingBufferPolicy()) , mStiffnessValues(mContextManager) , mTethers(mContextManager) - , mParticles(mContextManager) + , mParticles(mContextManager, DxDefaultRawBufferPolicy()) , mParticlesHostCopy(mContextManager, DxStagingBufferPolicy()) , mParticleAccelerations(mContextManager) , mParticleAccelerationsHostCopy(mContextManager, DxStagingBufferPolicy()) @@ -104,6 +103,7 @@ typedef Vec4T<uint32_t> Vec4u; , mSelfCollisionIndices(mContextManager) , mSelfCollisionParticles(mContextManager) , mSelfCollisionData(mContextManager) + , mTriangles(mContextManager) { if (mContextManager->synchronizeResources()) { @@ -135,7 +135,7 @@ cloth::Fabric* cloth::DxFactory::createFabric(uint32_t numParticles, Range<const cloth::Cloth* cloth::DxFactory::createCloth(Range<const PxVec4> particles, Fabric& fabric) { - return NV_CLOTH_NEW(DxClothImpl)(*this, fabric, particles); + return NV_CLOTH_NEW(DxCloth)(*this, static_cast<DxFabric&>(fabric), particles); } cloth::Solver* cloth::DxFactory::createSolver() @@ -253,7 +253,7 @@ void cloth::DxFactory::extractFabricData(const Fabric& fabric, Range<uint32_t> p { PX_ASSERT(&cloth.getFactory() == this); - const DxCloth& dxCloth = static_cast<const DxClothImpl&>(cloth).mCloth; + const DxCloth& dxCloth = static_cast<const DxCloth&>(cloth); PX_ASSERT(spheres.empty() || spheres.size() == dxCloth.mStartCollisionSpheres.size()); PX_ASSERT(capsules.empty() || capsules.size() == dxCloth.mCapsuleIndices.size() * 2); @@ -298,7 +298,7 @@ void cloth::DxFactory::extractFabricData(const Fabric& fabric, Range<uint32_t> p { PX_ASSERT(&cloth.getFactory() == this); - const DxCloth& dxCloth = static_cast<const DxClothImpl&>(cloth).mCloth; + const DxCloth& dxCloth = static_cast<const DxCloth&>(cloth); if (dxCloth.mMotionConstraints.mHostCopy.size()) { @@ -324,7 +324,7 @@ void cloth::DxFactory::extractFabricData(const Fabric& fabric, Range<uint32_t> p { PX_ASSERT(&cloth.getFactory() == this); - const DxCloth& dxCloth = static_cast<const DxClothImpl&>(cloth).mCloth; + const DxCloth& dxCloth = static_cast<const DxCloth&>(cloth); if (dxCloth.mSeparationConstraints.mHostCopy.size()) { @@ -383,7 +383,7 @@ void cloth::DxFactory::extractFabricData(const Fabric& fabric, Range<uint32_t> p DxContextLock contextLock(*this); - const DxCloth& dxCloth = static_cast<const DxClothImpl&>(cloth).mCloth; + const DxCloth& dxCloth = static_cast<const DxCloth&>(cloth); if (destWeights.size() > 0) { @@ -424,7 +424,7 @@ void cloth::DxFactory::extractFabricData(const Fabric& fabric, Range<uint32_t> p void cloth::DxFactory::extractSelfCollisionIndices(const Cloth& cloth, Range<uint32_t> destIndices) const { - const DxCloth& dxCloth = static_cast<const DxClothImpl&>(cloth).mCloth; + const DxCloth& dxCloth = static_cast<const DxCloth&>(cloth); PX_ASSERT(destIndices.size() == dxCloth.mSelfCollisionIndices.size()); intrinsics::memCopy(destIndices.begin(), dxCloth.mSelfCollisionIndicesHost.begin(), destIndices.size() * sizeof(uint32_t)); @@ -432,7 +432,7 @@ void cloth::DxFactory::extractFabricData(const Fabric& fabric, Range<uint32_t> p void cloth::DxFactory::extractRestPositions(const Cloth& cloth, Range<PxVec4> destRestPositions) const { - const DxCloth& dxCloth = static_cast<const DxClothImpl&>(cloth).mCloth; + const DxCloth& dxCloth = static_cast<const DxCloth&>(cloth); PX_ASSERT(destRestPositions.size() == dxCloth.mRestPositions.size()); intrinsics::memCopy(destRestPositions.begin(), DxCloth::MappedVec4fVectorType(const_cast<DxCloth&>(dxCloth).mRestPositions).begin(), destRestPositions.size() * sizeof(PxVec4)); diff --git a/NvCloth/src/dx/DxFactory.h b/NvCloth/src/dx/DxFactory.h index 0fec0d8..23d5382 100644 --- a/NvCloth/src/dx/DxFactory.h +++ b/NvCloth/src/dx/DxFactory.h @@ -63,7 +63,7 @@ protected: public: typedef DxFabric FabricType; - typedef ClothImpl<DxCloth> ImplType; + typedef DxCloth ClothType; explicit DxFactory(DxContextManagerCallback*); virtual ~DxFactory(); @@ -155,6 +155,8 @@ protected: DxBatchedStorage<uint32_t> mSelfCollisionIndices; DxBatchedStorage<physx::PxVec4> mSelfCollisionParticles; DxBatchedStorage<uint32_t> mSelfCollisionData; + + DxBatchedStorage<uint32_t> mTriangles; }; } } diff --git a/NvCloth/src/dx/DxSolver.cpp b/NvCloth/src/dx/DxSolver.cpp index 4670bb6..ab030d5 100644 --- a/NvCloth/src/dx/DxSolver.cpp +++ b/NvCloth/src/dx/DxSolver.cpp @@ -36,7 +36,6 @@ #include "../IterationState.h" #include <PsSort.h> #include <foundation/PxProfiler.h> -#include <PsFoundation.h> #if NV_CLOTH_ENABLE_DX11 @@ -114,7 +113,7 @@ struct ClothSimCostGreater void cloth::DxSolver::addCloth(Cloth* cloth) { - DxCloth& dxCloth = static_cast<DxClothImpl&>(*cloth).mCloth; + DxCloth& dxCloth = static_cast<DxCloth&>(*cloth); NV_CLOTH_ASSERT(mCloths.find(&dxCloth) == mCloths.end()); @@ -211,10 +210,10 @@ void cloth::DxSolver::addCloth(Cloth* cloth) void cloth::DxSolver::removeCloth(Cloth* cloth) { - DxCloth& cuCloth = static_cast<DxClothImpl&>(*cloth).mCloth; + DxCloth& dxCloth = static_cast<DxCloth&>(*cloth); ClothVector::Iterator begin = mCloths.begin(), end = mCloths.end(); - ClothVector::Iterator it = mCloths.find(&cuCloth); + ClothVector::Iterator it = mCloths.find(&dxCloth); if (it == end) return; // not found @@ -227,6 +226,18 @@ void cloth::DxSolver::removeCloth(Cloth* cloth) mClothDataDirty = true; } +int cloth::DxSolver::getNumCloths() const +{ + return mCloths.size(); +} +cloth::Cloth * const * cloth::DxSolver::getClothList() const +{ + if(getNumCloths()) + return reinterpret_cast<Cloth* const*>(&mCloths[0]); + else + return nullptr; +} + bool cloth::DxSolver::beginSimulation(float dt) { if (mCloths.empty()) @@ -340,24 +351,25 @@ void cloth::DxSolver::executeKernel() { context->CSSetShader(mFactory.mSolverKernelComputeShader, NULL, 0); - ID3D11ShaderResourceView* resourceViews[17] = { + ID3D11ShaderResourceView* resourceViews[18] = { mClothData.mBuffer.resourceView(), /*mFrameData.mBuffer.resourceView()*/NULL, mIterationData.mBuffer.resourceView(), mFactory.mPhaseConfigs.mBuffer.resourceView(), mFactory.mConstraints.mBuffer.resourceView(), mFactory.mTethers.mBuffer.resourceView(), mFactory.mCapsuleIndicesDeviceCopy.resourceView(), mFactory.mCollisionSpheresDeviceCopy.resourceView(), mFactory.mConvexMasksDeviceCopy.resourceView(), mFactory.mCollisionPlanesDeviceCopy.resourceView(), - mFactory.mCollisionTriangles.mBuffer.resourceView(), + mFactory.mCollisionTrianglesDeviceCopy.resourceView(), mFactory.mMotionConstraints.mBuffer.resourceView(), mFactory.mSeparationConstraints.mBuffer.resourceView(), mFactory.mParticleAccelerations.mBuffer.resourceView(), mFactory.mRestPositionsDeviceCopy.resourceView(), mFactory.mSelfCollisionIndices.mBuffer.resourceView(), - mFactory.mStiffnessValues.mBuffer.resourceView() + mFactory.mStiffnessValues.mBuffer.resourceView(), + mFactory.mTriangles.mBuffer.resourceView() }; - context->CSSetShaderResources(0, 17, resourceViews); + context->CSSetShaderResources(0, 18, resourceViews); ID3D11UnorderedAccessView* accessViews[4] = { - mFactory.mParticles.mBuffer.accessView(), + mFactory.mParticles.mBuffer.accessViewRaw(), mFactory.mSelfCollisionParticles.mBuffer.accessView(), mFactory.mSelfCollisionData.mBuffer.accessView(), mFrameData.mBuffer.accessView() diff --git a/NvCloth/src/dx/DxSolver.h b/NvCloth/src/dx/DxSolver.h index cafbfa5..09f523a 100644 --- a/NvCloth/src/dx/DxSolver.h +++ b/NvCloth/src/dx/DxSolver.h @@ -55,8 +55,10 @@ class DxSolver : private DxContextLock, public Solver DxSolver(DxFactory&); ~DxSolver(); - virtual void addCloth(Cloth*); - virtual void removeCloth(Cloth*); + virtual void addCloth(Cloth*) override; + virtual void removeCloth(Cloth*) override; + virtual int getNumCloths() const override; + virtual Cloth * const * getClothList() const override; // functions executing the simulation work. virtual bool beginSimulation(float dt); diff --git a/NvCloth/src/dx/DxSolverKernel.hlsl b/NvCloth/src/dx/DxSolverKernel.hlsl index 2d42dea..2ca42b3 100644 --- a/NvCloth/src/dx/DxSolverKernel.hlsl +++ b/NvCloth/src/dx/DxSolverKernel.hlsl @@ -41,7 +41,7 @@ struct IndexPair uint32_t second; }; -RWStructuredBuffer<float4> bParticles : register(u0); +RWByteAddressBuffer bParticles : register(u0); //contains float4 data RWStructuredBuffer<float4> bSelfCollisionParticles : register(u1); RWStructuredBuffer<uint32_t> bSelfCollisionData : register(u2); @@ -73,6 +73,9 @@ StructuredBuffer<int32_t> bSelfCollisionIndices : register(t15); StructuredBuffer<float> bPerConstraintStiffness : register(t16); +//cloth mesh triangle information for air drag/lift +//Note that the buffer actually contains uint16_t values +StructuredBuffer<uint32_t> bTriangles : register(t17); groupshared DxClothData gClothData; groupshared DxFrameData gFrameData; @@ -94,6 +97,7 @@ interface IParticles { float4 get(uint32_t index); void set(uint32_t index, float4 value); + void atomicAdd(uint32_t index, float3 value); }; @@ -184,6 +188,99 @@ void accelerateParticles(IParticles curParticles, uint32_t threadIdx) GroupMemoryBarrierWithGroupSync(); } +float rsqrt_2(const float v) +{ + float halfV = v * 0.5f; + float threeHalf = 1.5f; + float r = rsqrt(v); + for(int i = 0; i < 10; ++i) + r = r * (threeHalf - halfV * r * r); + return r; +} + +void applyWind(IParticles curParticles, IParticles prevParticles, uint32_t threadIdx) +{ + const float dragCoefficient = gFrameData.mDragCoefficient; + const float liftCoefficient = gFrameData.mLiftCoefficient; + + if(dragCoefficient == 0.0f && liftCoefficient == 0.0f) + return; + + const float oneThird = 1.0f / 3.0f; + float3 wind = float3(gIterData.mWind[0], gIterData.mWind[1], gIterData.mWind[2]); + + GroupMemoryBarrierWithGroupSync(); + + uint32_t triangleOffset = gClothData.mStartTriangleOffset; + + for(uint32_t i = threadIdx; i < gClothData.mNumTriangles; i += blockDim.x) + { + uint32_t i0 = bTriangles[triangleOffset + ((i * 3 + 0) >> 1)]; + uint32_t i1 = bTriangles[triangleOffset + ((i * 3 + 1) >> 1)]; + uint32_t i2 = bTriangles[triangleOffset + ((i * 3 + 2) >> 1)]; + + if((i * 3) & 1) + { + i0 = (i0 & 0xFFFF0000) >> 16; + i1 = (i1 & 0x0000FFFF); + i2 = (i2 & 0xFFFF0000) >> 16; + } + else + { + i0 = (i0 & 0x0000FFFF); + i1 = (i1 & 0xFFFF0000) >> 16; + i2 = (i2 & 0x0000FFFF); + } + + float4 c0 = curParticles.get(i0); + float4 c1 = curParticles.get(i1); + float4 c2 = curParticles.get(i2); + + float4 p0 = prevParticles.get(i0); + float4 p1 = prevParticles.get(i1); + float4 p2 = prevParticles.get(i2); + + float3 cur = oneThird * (c0.xyz + c1.xyz + c2.xyz); + float3 prev = oneThird * (p0.xyz + p1.xyz + p2.xyz); + + float3 delta = cur - prev + wind; + + if(gIterData.mIsTurning) + { + const float3 rot[3] = { + float3(gFrameData.mRotation[0], gFrameData.mRotation[1], gFrameData.mRotation[2]), + float3(gFrameData.mRotation[3], gFrameData.mRotation[4], gFrameData.mRotation[5]), + float3(gFrameData.mRotation[6], gFrameData.mRotation[7], gFrameData.mRotation[8]) + }; + float3 d = wind - prev; + delta = cur + d.x * rot[0] + d.y * rot[1] + d.z * rot[2]; + } + + float3 normal = cross(c2.xyz - c0.xyz, c1.xyz - c0.xyz); + + float doubleArea = sqrt(dot(normal, normal)); + + float invSqrScale = dot(delta, delta); + float scale = rsqrt(invSqrScale); + + float cosTheta = dot(normal, delta) * scale / doubleArea; + float sinTheta = sqrt(max(0.0f, 1.0f - cosTheta * cosTheta)); + + float3 liftDir = cross(cross(delta, normal), scale * delta); + + float3 lift = liftCoefficient * cosTheta * sinTheta * liftDir; + float3 drag = dragCoefficient * abs(cosTheta) * doubleArea * delta; + + float3 impulse = invSqrScale < 1.192092896e-07F ? float3(0.0f, 0.0f, 0.0f) : lift + drag; + + curParticles.atomicAdd(i0, -impulse * c0.w); + curParticles.atomicAdd(i1, -impulse * c1.w); + curParticles.atomicAdd(i2, -impulse * c2.w); + } + + GroupMemoryBarrierWithGroupSync(); +} + void constrainMotion(IParticles curParticles, uint32_t threadIdx, float alpha) { if (gFrameData.mStartMotionConstrainsOffset == -1) @@ -487,7 +584,7 @@ struct TriangleData }; -void collideTriangles(IParticles curParticles, int32_t i) +void collideParticleTriangles(IParticles curParticles, int32_t i, float alpha) { float4 curPos = curParticles.get(i); float3 pos = curPos.xyz; @@ -497,10 +594,18 @@ void collideTriangles(IParticles curParticles, int32_t i) for (uint32_t j = 0; j < gClothData.mNumCollisionTriangles; ++j) { + // start + (target - start) * alpha + float3 startBase = bCollisionTriangles[gFrameData.mStartCollisionTrianglesOffset + 3 * j]; + float3 targetBase = bCollisionTriangles[gFrameData.mTargetCollisionTrianglesOffset + 3 * j]; + float3 startEdge0 = bCollisionTriangles[gFrameData.mStartCollisionTrianglesOffset + 3 * j + 1]; + float3 targetEdge0 = bCollisionTriangles[gFrameData.mTargetCollisionTrianglesOffset + 3 * j + 1]; + float3 startEdge1 = bCollisionTriangles[gFrameData.mStartCollisionTrianglesOffset + 3 * j + 2]; + float3 targetEdge1 = bCollisionTriangles[gFrameData.mTargetCollisionTrianglesOffset + 3 * j + 2]; + TriangleData tIt; - tIt.base = bCollisionTriangles[gFrameData.mStartCollisionTrianglesOffset + 3 * j]; - tIt.edge0 = bCollisionTriangles[gFrameData.mStartCollisionTrianglesOffset + 3 * j + 1]; - tIt.edge1 = bCollisionTriangles[gFrameData.mStartCollisionTrianglesOffset + 3 * j + 2]; + tIt.base = startBase + (targetBase - startBase) * alpha; + tIt.edge0 = startEdge0 + (targetEdge0 - startEdge0) * alpha; + tIt.edge1 = startEdge1 + (targetEdge1 - startEdge1) * alpha; tIt.initialize(); @@ -565,14 +670,14 @@ void collideTriangles(IParticles curParticles, uint32_t threadIdx, float alpha) // mCurData.mSphereX[offset] = start + (target - start) * alpha; // } // -// GroupMemoryBarrierWithGroupSync(); + GroupMemoryBarrierWithGroupSync(); for (uint32_t j = threadIdx; j < gClothData.mNumParticles; j += blockDim) { // float4 curPos = curParticles.get(j); // float3 delta; - collideTriangles(curParticles, j); + collideParticleTriangles(curParticles, j, alpha); // if (numCollisions > 0) // { // float scale = 1.0f / numCollisions; @@ -1148,7 +1253,7 @@ void collideContinuousCapsules(IParticles curParticles, IParticles prevParticles void collideParticles(IParticles curParticles, IParticles prevParticles, uint32_t threadIdx, float alpha, float prevAlpha) { collideConvexes(curParticles, prevParticles, threadIdx, alpha); - collideTriangles(curParticles, alpha); + collideTriangles(curParticles, threadIdx, alpha); if (gClothData.mEnableContinuousCollision) collideContinuousCapsules(curParticles, prevParticles, threadIdx, alpha, prevAlpha); else @@ -1572,6 +1677,7 @@ void simulateCloth(IParticles curParticles, IParticles prevParticles, uint32_t t integrateParticles(curParticles, prevParticles, threadIdx); accelerateParticles(curParticles, threadIdx); + applyWind(curParticles, prevParticles, threadIdx); constrainMotion(curParticles, threadIdx, alpha); constrainTether(curParticles, threadIdx); // note: GroupMemoryBarrierWithGroupSync at beginning of each fabric phase @@ -1604,6 +1710,21 @@ class ParticlesInSharedMem : IParticles gCurParticles[index + MaxParticlesInSharedMem * 2] = asuint(value.z); gCurParticles[index + MaxParticlesInSharedMem * 3] = asuint(value.w); } + void atomicAdd(uint32_t index, float3 value) + { + interlockedAddFloat(index + MaxParticlesInSharedMem * 0, value.x); + interlockedAddFloat(index + MaxParticlesInSharedMem * 1, value.y); + interlockedAddFloat(index + MaxParticlesInSharedMem * 2, value.z); + } + + void interlockedAddFloat(uint addr, float value) + { + uint comp, original = gCurParticles[addr]; + [allow_uav_condition]do + { + InterlockedCompareExchange(gCurParticles[addr], comp = original, asuint(asfloat(original) + value), original); + } while(original != comp); + } }; class ParticlesInGlobalMem : IParticles @@ -1612,11 +1733,26 @@ class ParticlesInGlobalMem : IParticles float4 get(uint32_t index) { - return bParticles[_offset + index]; + return asfloat(bParticles.Load4((_offset + index)*16)); } void set(uint32_t index, float4 value) { - bParticles[_offset + index] = value; + bParticles.Store4((_offset + index) * 16, asuint(value)); + } + void atomicAdd(uint32_t index, float3 value) + { + interlockedAddFloat((_offset + index) * 16 + 0, value.x); + interlockedAddFloat((_offset + index) * 16 + 4, value.y); + interlockedAddFloat((_offset + index) * 16 + 8, value.z); + } + + void interlockedAddFloat(uint addr, float value) + { + uint comp, original = bParticles.Load(addr); + [allow_uav_condition]do + { + bParticles.InterlockedCompareExchange(addr, comp = original, asuint(asfloat(original) + value), original); + } while(original != comp); } }; @@ -1640,14 +1776,14 @@ class ParticlesInGlobalMem : IParticles uint32_t i; for (i = threadIdx; i < gClothData.mNumParticles; i += blockDim) { - curParticles.set(i, bParticles[gClothData.mParticlesOffset + i]); + curParticles.set(i, asfloat(bParticles.Load4((gClothData.mParticlesOffset + i) * 16))); } simulateCloth(curParticles, prevParticles, threadIdx); for (i = threadIdx; i < gClothData.mNumParticles; i += blockDim) { - bParticles[gClothData.mParticlesOffset + i] = curParticles.get(i); + bParticles.Store4((gClothData.mParticlesOffset + i) * 16, asuint(curParticles.get(i))); } } else diff --git a/NvCloth/src/dx/DxSolverKernelBlob.h b/NvCloth/src/dx/DxSolverKernelBlob.h index 8c2dd82..e69de29 100644 --- a/NvCloth/src/dx/DxSolverKernelBlob.h +++ b/NvCloth/src/dx/DxSolverKernelBlob.h @@ -1,24502 +0,0 @@ -#if 0 -// -// Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384 -// -// -// Buffer Definitions: -// -// Resource bind info for bClothData -// { -// -// struct DxClothData -// { -// -// uint mNumParticles; // Offset: 0 -// uint mParticlesOffset; // Offset: 4 -// uint mNumPhases; // Offset: 8 -// uint mPhaseConfigOffset; // Offset: 12 -// uint mConstraintOffset; // Offset: 16 -// uint mStiffnessOffset; // Offset: 20 -// uint mNumTethers; // Offset: 24 -// uint mTetherOffset; // Offset: 28 -// float mTetherConstraintScale; // Offset: 32 -// float mMotionConstraintScale; // Offset: 36 -// float mMotionConstraintBias; // Offset: 40 -// uint mNumCapsules; // Offset: 44 -// uint mCapsuleOffset; // Offset: 48 -// uint mNumSpheres; // Offset: 52 -// uint mNumPlanes; // Offset: 56 -// uint mNumConvexes; // Offset: 60 -// uint mConvexMasksOffset; // Offset: 64 -// uint mNumCollisionTriangles; // Offset: 68 -// uint mEnableContinuousCollision;// Offset: 72 -// float mCollisionMassScale; // Offset: 76 -// float mFrictionScale; // Offset: 80 -// float mSelfCollisionDistance; // Offset: 84 -// uint mNumSelfCollisionIndices; // Offset: 88 -// uint mSelfCollisionIndicesOffset;// Offset: 92 -// uint mSelfCollisionParticlesOffset;// Offset: 96 -// uint mSelfCollisionDataOffset; // Offset: 100 -// uint mSleepTestInterval; // Offset: 104 -// uint mSleepAfterCount; // Offset: 108 -// float mSleepThreshold; // Offset: 112 -// -// } $Element; // Offset: 0 Size: 116 -// -// } -// -// Resource bind info for bIterData -// { -// -// struct DxIterationData -// { -// -// float mIntegrationTrafo[24]; // Offset: 0 -// uint mIsTurning; // Offset: 96 -// -// } $Element; // Offset: 0 Size: 100 -// -// } -// -// Resource bind info for bPhaseConfigs -// { -// -// struct DxPhaseConfig -// { -// -// float mStiffness; // Offset: 0 -// float mStiffnessMultiplier; // Offset: 4 -// float mCompressionLimit; // Offset: 8 -// float mStretchLimit; // Offset: 12 -// uint mFirstConstraint; // Offset: 16 -// uint mNumConstraints; // Offset: 20 -// -// } $Element; // Offset: 0 Size: 24 -// -// } -// -// Resource bind info for bConstraints -// { -// -// struct DxConstraint -// { -// -// float mRestvalue; // Offset: 0 -// uint mIndices; // Offset: 4 -// -// } $Element; // Offset: 0 Size: 8 -// -// } -// -// Resource bind info for bTetherConstraints -// { -// -// struct DxTether -// { -// -// uint mValue; // Offset: 0 -// -// } $Element; // Offset: 0 Size: 4 -// -// } -// -// Resource bind info for bCapsuleIndices -// { -// -// struct IndexPair -// { -// -// uint first; // Offset: 0 -// uint second; // Offset: 4 -// -// } $Element; // Offset: 0 Size: 8 -// -// } -// -// Resource bind info for bCollisionSpheres -// { -// -// float4 $Element; // Offset: 0 Size: 16 -// -// } -// -// Resource bind info for bConvexMasks -// { -// -// uint $Element; // Offset: 0 Size: 4 -// -// } -// -// Resource bind info for bCollisionPlanes -// { -// -// float4 $Element; // Offset: 0 Size: 16 -// -// } -// -// Resource bind info for bCollisionTriangles -// { -// -// float3 $Element; // Offset: 0 Size: 12 -// -// } -// -// Resource bind info for bMotionConstraints -// { -// -// float4 $Element; // Offset: 0 Size: 16 -// -// } -// -// Resource bind info for bSeparationConstraints -// { -// -// float4 $Element; // Offset: 0 Size: 16 -// -// } -// -// Resource bind info for bParticleAccelerations -// { -// -// float4 $Element; // Offset: 0 Size: 16 -// -// } -// -// Resource bind info for bRestPositions -// { -// -// float4 $Element; // Offset: 0 Size: 16 -// -// } -// -// Resource bind info for bSelfCollisionIndices -// { -// -// int $Element; // Offset: 0 Size: 4 -// -// } -// -// Resource bind info for bPerConstraintStiffness -// { -// -// float $Element; // Offset: 0 Size: 4 -// -// } -// -// Resource bind info for bParticles -// { -// -// float4 $Element; // Offset: 0 Size: 16 -// -// } -// -// Resource bind info for bSelfCollisionParticles -// { -// -// float4 $Element; // Offset: 0 Size: 16 -// -// } -// -// Resource bind info for bSelfCollisionData -// { -// -// uint $Element; // Offset: 0 Size: 4 -// -// } -// -// Resource bind info for bFrameData -// { -// -// struct DxFrameData -// { -// -// bool mDeviceParticlesDirty; // Offset: 0 -// uint mNumSharedPositions; // Offset: 4 -// float mIterDt; // Offset: 8 -// uint mFirstIteration; // Offset: 12 -// uint mNumIterations; // Offset: 16 -// float mTetherConstraintStiffness;// Offset: 20 -// float mMotionConstraintStiffness;// Offset: 24 -// uint mStartMotionConstrainsOffset;// Offset: 28 -// uint mTargetMotionConstrainsOffset;// Offset: 32 -// uint mStartSeparationConstrainsOffset;// Offset: 36 -// uint mTargetSeparationConstrainsOffset;// Offset: 40 -// uint mParticleAccelerationsOffset;// Offset: 44 -// uint mStartSphereOffset; // Offset: 48 -// uint mTargetSphereOffset; // Offset: 52 -// uint mStartCollisionPlaneOffset;// Offset: 56 -// uint mTargetCollisionPlaneOffset;// Offset: 60 -// uint mStartCollisionTrianglesOffset;// Offset: 64 -// uint mTargetCollisionTrianglesOffset;// Offset: 68 -// float mSelfCollisionStiffness; // Offset: 72 -// float mParticleBounds[6]; // Offset: 76 -// uint mSleepPassCounter; // Offset: 100 -// uint mSleepTestCounter; // Offset: 104 -// float mStiffnessExponent; // Offset: 108 -// uint mRestPositionsOffset; // Offset: 112 -// bool mInitSelfCollisionData; // Offset: 116 -// -// } $Element; // Offset: 0 Size: 120 -// -// } -// -// -// Resource Bindings: -// -// Name Type Format Dim Slot Elements -// ------------------------------ ---------- ------- ----------- ---- -------- -// bClothData texture struct r/o 0 1 -// bIterData texture struct r/o 2 1 -// bPhaseConfigs texture struct r/o 3 1 -// bConstraints texture struct r/o 4 1 -// bTetherConstraints texture struct r/o 5 1 -// bCapsuleIndices texture struct r/o 6 1 -// bCollisionSpheres texture struct r/o 7 1 -// bConvexMasks texture struct r/o 8 1 -// bCollisionPlanes texture struct r/o 9 1 -// bCollisionTriangles texture struct r/o 10 1 -// bMotionConstraints texture struct r/o 11 1 -// bSeparationConstraints texture struct r/o 12 1 -// bParticleAccelerations texture struct r/o 13 1 -// bRestPositions texture struct r/o 14 1 -// bSelfCollisionIndices texture struct r/o 15 1 -// bPerConstraintStiffness texture struct r/o 16 1 -// bParticles UAV struct r/w 0 1 -// bSelfCollisionParticles UAV struct r/w 1 1 -// bSelfCollisionData UAV struct r/w 2 1 -// bFrameData UAV struct r/w 3 1 -// -// -// -// Input signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// no Input -// -// Output signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// no Output -cs_5_0 -dcl_globalFlags refactoringAllowed -dcl_immediateConstantBuffer { { 1.000000, 0, 0, 0}, - { 0, 1.000000, 0, 0}, - { 0, 0, 1.000000, 0}, - { 0, 0, 0, 1.000000} } -dcl_resource_structured t0, 116 -dcl_resource_structured t2, 100 -dcl_resource_structured t3, 24 -dcl_resource_structured t4, 8 -dcl_resource_structured t5, 4 -dcl_resource_structured t6, 8 -dcl_resource_structured t7, 16 -dcl_resource_structured t8, 4 -dcl_resource_structured t9, 16 -dcl_resource_structured t10, 12 -dcl_resource_structured t11, 16 -dcl_resource_structured t12, 16 -dcl_resource_structured t13, 16 -dcl_resource_structured t14, 16 -dcl_resource_structured t15, 4 -dcl_resource_structured t16, 4 -dcl_uav_structured u0, 16 -dcl_uav_structured u1, 16 -dcl_uav_structured u2, 4 -dcl_uav_structured u3, 120 -dcl_input vThreadGroupID.x -dcl_input vThreadIDInGroup.x -dcl_temps 48 -dcl_tgsm_raw g0, 116 -dcl_tgsm_raw g1, 120 -dcl_tgsm_raw g2, 100 -dcl_tgsm_structured g3, 4, 7900 -dcl_tgsm_structured g4, 4, 192 -dcl_tgsm_raw g5, 36 -dcl_tgsm_structured g6, 4, 3 -dcl_thread_group 1024, 1, 1 -if_z vThreadIDInGroup.x - ld_structured_indexable(structured_buffer, stride=116)(mixed,mixed,mixed,mixed) r0.xyzw, vThreadGroupID.x, l(0), t0.xyzw - ld_structured_indexable(structured_buffer, stride=116)(mixed,mixed,mixed,mixed) r1.xyzw, vThreadGroupID.x, l(16), t0.xyzw - ld_structured_indexable(structured_buffer, stride=116)(mixed,mixed,mixed,mixed) r2.xyzw, vThreadGroupID.x, l(32), t0.xyzw - ld_structured_indexable(structured_buffer, stride=116)(mixed,mixed,mixed,mixed) r3.xy, vThreadGroupID.x, l(48), t0.xyxx - ld_structured_indexable(structured_buffer, stride=116)(mixed,mixed,mixed,mixed) r4.xyzw, vThreadGroupID.x, l(60), t0.xyzw - ld_structured_indexable(structured_buffer, stride=116)(mixed,mixed,mixed,mixed) r5.xyzw, vThreadGroupID.x, l(76), t0.xyzw - ld_structured_indexable(structured_buffer, stride=116)(mixed,mixed,mixed,mixed) r6.xyzw, vThreadGroupID.x, l(92), t0.xyzw - ld_structured_indexable(structured_buffer, stride=116)(mixed,mixed,mixed,mixed) r3.z, vThreadGroupID.x, l(112), t0.xxxx - store_raw g0.xyzw, l(0), r0.xyzw - store_raw g0.xyzw, l(16), r1.xyzw - store_raw g0.xyzw, l(32), r2.xyzw - store_raw g0.xy, l(48), r3.xyxx - store_raw g0.xyzw, l(60), r4.xyzw - store_raw g0.xyzw, l(76), r5.xyzw - store_raw g0.xyzw, l(92), r6.xyzw - store_raw g0.x, l(112), r3.z - ld_structured_indexable(structured_buffer, stride=120)(mixed,mixed,mixed,mixed) r0.xyzw, vThreadGroupID.x, l(0), u3.xyzw - ld_structured_indexable(structured_buffer, stride=120)(mixed,mixed,mixed,mixed) r1.xyzw, vThreadGroupID.x, l(16), u3.xyzw - ld_structured_indexable(structured_buffer, stride=120)(mixed,mixed,mixed,mixed) r2.xyzw, vThreadGroupID.x, l(32), u3.xyzw - ld_structured_indexable(structured_buffer, stride=120)(mixed,mixed,mixed,mixed) r3.xyzw, vThreadGroupID.x, l(48), u3.xyzw - ld_structured_indexable(structured_buffer, stride=120)(mixed,mixed,mixed,mixed) r4.xyzw, vThreadGroupID.x, l(64), u3.xyzw - ld_structured_indexable(structured_buffer, stride=120)(mixed,mixed,mixed,mixed) r5.xyzw, vThreadGroupID.x, l(80), u3.xyzw - ld_structured_indexable(structured_buffer, stride=120)(mixed,mixed,mixed,mixed) r6.xyzw, vThreadGroupID.x, l(96), u3.xyzw - ld_structured_indexable(structured_buffer, stride=120)(mixed,mixed,mixed,mixed) r7.xy, vThreadGroupID.x, l(112), u3.xyxx - store_raw g1.xyzw, l(0), r0.xyzw - store_raw g1.xyzw, l(16), r1.xyzw - store_raw g1.xyzw, l(32), r2.xyzw - store_raw g1.xyzw, l(48), r3.xyzw - store_raw g1.xyzw, l(64), r4.xyzw - store_raw g1.xyzw, l(80), r5.xyzw - store_raw g1.xyzw, l(96), r6.xyzw - store_raw g1.xy, l(112), r7.xyxx -endif -sync_g_t -ld_raw r0.xy, l(0), g0.xyxx -iadd r0.x, r0.x, r0.y -ld_raw r0.y, l(0), g0.xxxx -uge r0.z, l(1975), r0.y -if_nz r0.z - ld_raw r0.z, l(4), g0.xxxx - mov r1.x, vThreadIDInGroup.x - loop - uge r0.w, r1.x, r0.y - breakc_nz r0.w - iadd r0.w, r0.z, r1.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r2.xyzw, r0.w, l(0), u0.xyzw - store_structured g3.x, r1.x, l(0), r2.x - iadd r1.xyzw, r1.xxxx, l(1024, 1975, 3950, 5925) - store_structured g3.x, r1.y, l(0), r2.y - store_structured g3.x, r1.z, l(0), r2.z - store_structured g3.x, r1.w, l(0), r2.w - endloop - not r0.y, vThreadIDInGroup.x - and r0.y, r0.y, l(3) - ult r1.xyzw, vThreadIDInGroup.xxxx, l(192, 176, 3, 512) - and r2.xyzw, vThreadIDInGroup.xxxx, l(32, 31, 1, 2) - movc r0.z, r2.x, l(-1.000000), l(1.000000) - iadd r3.xyzw, vThreadIDInGroup.xxxx, l(16, 8, 4, 2) - ieq r0.w, r2.y, l(0) - and r0.w, r0.w, r1.x - ushr r4.xy, vThreadIDInGroup.xxxx, l(6, 5, 0, 0) - ishl r2.x, r4.y, l(2) - ishl r4.z, vThreadIDInGroup.x, l(3) - iadd r4.z, r4.z, l(76) - iadd r2.xz, r2.xxzx, l(76, 0, -1, 0) - ine r2.w, r2.w, l(0) - ieq r2.w, r2.w, l(0) - and r5.xyz, vThreadIDInGroup.xxxx, l(4, 8, 992, 0) - ine r5.xy, r5.xyxx, l(0, 0, 0, 0) - ieq r5.xy, r5.xyxx, l(0, 0, 0, 0) - iadd r6.xyzw, vThreadIDInGroup.xxxx, l(1, 1040, 3088, 1032) - ult r7.xyzw, r2.yyyy, l(16, 8, 4, 2) - ult r4.w, r2.y, l(1) - iadd r8.xyzw, vThreadIDInGroup.xxxx, l(3080, 1028, 3076, 1026) - iadd r9.xyzw, r3.xyzw, l(2048, 2048, 2048, 2048) - iadd r10.xyz, r5.zzzz, l(1024, 2048, 3072, 0) - iadd r11.xy, r4.yyyy, l(1, 513, 0, 0) - bfi r12.xyzw, l(10, 11, 10, 5), l(0, 0, 0, 5), vThreadIDInGroup.xxxx, l(1024, 2048, 3072, 0) - iadd r11.xz, r11.xxyx, r12.wwww - iadd r13.xyzw, vThreadIDInGroup.xxxx, l(3074, 1025, 3073, 514) - iadd r14.xy, r6.xxxx, l(2048, 4096, 0, 0) - iadd r5.w, vThreadIDInGroup.x, l(4096) - iadd r10.w, r13.w, l(4096) - iadd r15.xyzw, vThreadIDInGroup.xxxx, l(4097, 512, 4610, 4093) - iadd r11.w, r15.y, l(4096) - uge r16.xyzw, vThreadIDInGroup.xxxx, l(1, 2, 4, 8) - iadd r17.xyzw, vThreadIDInGroup.xxxx, l(506, 4081, 482, 4033) - iadd r14.zw, r17.xxxz, l(0, 0, 4096, 4096) - uge r18.xyzw, vThreadIDInGroup.xxxx, l(16, 32, 64, 128) - iadd r17.xz, vThreadIDInGroup.xxxx, l(386, 0, 3841, 0) - iadd r12.w, r17.x, l(4096) - uge r13.w, vThreadIDInGroup.x, l(256) - iadd r11.xz, r11.xxzx, l(4096, 0, 4096, 0) - mov r15.y, l(0) - loop - ld_raw r17.x, l(16), g1.xxxx - uge r19.x, r15.y, r17.x - breakc_nz r19.x - utof r19.x, r15.y - add r19.y, r19.x, l(1.000000) - utof r17.x, r17.x - div r17.x, r19.y, r17.x - if_z vThreadIDInGroup.x - ld_raw r19.y, l(12), g1.xxxx - iadd r19.y, r15.y, r19.y - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r20.xyzw, r19.y, l(0), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r21.xyzw, r19.y, l(16), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r22.xyzw, r19.y, l(32), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r23.xyzw, r19.y, l(48), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r24.xyzw, r19.y, l(64), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r25.xyzw, r19.y, l(80), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r19.y, r19.y, l(96), t2.xxxx - store_raw g2.xyzw, l(0), r20.xyzw - store_raw g2.xyzw, l(16), r21.xyzw - store_raw g2.xyzw, l(32), r22.xyzw - store_raw g2.xyzw, l(48), r23.xyzw - store_raw g2.xyzw, l(64), r24.xyzw - store_raw g2.xyzw, l(80), r25.xyzw - store_raw g2.x, l(96), r19.y - endif - sync_g_t - ld_raw r19.y, l(0), g0.xxxx - ld_raw r20.xyz, l(12), g2.xyzx - ld_raw r21.xyzw, l(60), g2.xyzw - ld_raw r22.xyzw, l(24), g2.xyzw - ld_raw r23.xyzw, l(76), g2.xyzw - ld_raw r24.xyzw, l(40), g2.xyzw - ld_raw r19.zw, l(92), g2.xxxy - ld_raw r20.w, l(56), g2.xxxx - ld_raw r25.xyzw, l(12), g2.xyzw - ld_raw r26.x, l(36), g2.xxxx - ld_raw r26.y, l(48), g2.xxxx - mov r26.z, vThreadIDInGroup.x - loop - uge r26.w, r26.z, r19.y - breakc_nz r26.w - ld_structured r27.x, r26.z, l(0), g3.xxxx - iadd r28.xyzw, r26.zzzz, l(1975, 3950, 5925, 1024) - ld_structured r27.y, r28.x, l(0), g3.xxxx - ld_structured r27.z, r28.y, l(0), g3.xxxx - ld_structured r26.w, r28.z, l(0), g3.xxxx - iadd r27.w, r0.x, r26.z - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r29.xyzw, r27.w, l(0), u0.xyzw - eq r30.x, r26.w, l(0.000000) - movc r26.w, r30.x, r29.w, r26.w - lt r29.w, l(0.000000), r26.w - if_nz r29.w - if_nz r19.w - add r30.xy, r20.xyxx, r27.xyxx - mad r30.xy, r27.xxxx, r21.xwxx, r30.xyxx - mad r30.xy, r29.xxxx, r22.xwxx, r30.xyxx - mad r29.w, r27.y, r21.y, r30.x - mad r29.w, r29.y, r22.y, r29.w - mad r29.w, r27.z, r21.z, r29.w - mad r31.x, r29.z, r22.z, r29.w - mad r29.w, r27.y, r23.x, r30.y - mad r29.w, r29.y, r24.x, r29.w - mad r29.w, r27.z, r23.y, r29.w - mad r31.y, r29.z, r24.y, r29.w - add r29.w, r20.z, r27.z - mad r29.w, r27.x, r23.z, r29.w - mad r29.w, r29.x, r24.z, r29.w - mad r29.w, r27.y, r23.w, r29.w - mad r29.w, r29.y, r24.w, r29.w - mad r29.w, r27.z, r19.z, r29.w - mad r29.w, r29.z, r20.w, r29.w - else - add r29.xy, r27.xyxx, -r29.xyxx - mad r29.x, r29.x, r25.w, r25.x - add r31.x, r27.x, r29.x - mad r29.x, r29.y, r26.x, r25.y - add r31.y, r27.y, r29.x - add r29.x, r27.z, -r29.z - mad r29.x, r29.x, r26.y, r25.z - add r29.w, r27.z, r29.x - endif - ld_raw r29.xyz, l(0), g2.xyzx - add r27.xyz, r27.xyzx, r29.xyzx - else - mov r31.xy, r27.xyxx - mov r29.w, r27.z - endif - store_structured g3.x, r26.z, l(0), r31.x - store_structured g3.x, r28.x, l(0), r31.y - store_structured g3.x, r28.y, l(0), r29.w - store_structured g3.x, r28.z, l(0), r26.w - store_structured u0.xyz, r27.w, l(0), r27.xyzx - mov r26.z, r28.w - endloop - ld_raw r19.y, l(44), g1.xxxx - sync_g_t - ld_raw r19.z, l(8), g1.xxxx - mul r19.z, r19.z, r19.z - movc r19.z, r0.y, r19.z, l(0) - ld_raw r19.w, l(0), g0.xxxx - ishl r20.x, r19.w, l(2) - mov r20.y, vThreadIDInGroup.x - loop - uge r20.z, r20.y, r20.x - breakc_nz r20.z - ushr r20.z, r20.y, l(2) - ld_structured r21.x, r20.z, l(0), g3.xxxx - iadd r22.xyz, r20.zzzz, l(1975, 3950, 5925, 0) - ld_structured r21.y, r22.x, l(0), g3.xxxx - ld_structured r21.z, r22.y, l(0), g3.xxxx - ld_structured r21.w, r22.z, l(0), g3.xxxx - lt r20.w, l(0.000000), r21.w - if_nz r20.w - iadd r20.w, r19.y, r20.y - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r23.xyzw, r20.w, l(0), t13.xyzw - mad r21.xyzw, r23.xyzw, r19.zzzz, r21.xyzw - store_structured g3.x, r20.z, l(0), r21.x - store_structured g3.x, r22.x, l(0), r21.y - store_structured g3.x, r22.y, l(0), r21.z - store_structured g3.x, r22.z, l(0), r21.w - endif - iadd r20.y, r20.y, l(1024) - endloop - sync_g_t - ld_raw r19.y, l(28), g1.xxxx - ine r19.y, r19.y, l(-1) - if_nz r19.y - ld_raw r19.yz, l(36), g0.xxyx - ld_raw r20.xyz, l(24), g1.xyzx - ld_raw r19.w, l(0), g0.xxxx - mov r20.w, vThreadIDInGroup.x - loop - uge r21.x, r20.w, r19.w - breakc_nz r21.x - iadd r21.xy, r20.wwww, r20.yzyy - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r22.xyzw, r21.x, l(0), t11.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r21.xyzw, r21.y, l(0), t11.xyzw - add r21.xyzw, -r22.xyzw, r21.xyzw - mad r21.xyzw, r21.xyzw, r17.xxxx, r22.xyzw - ld_structured r22.x, r20.w, l(0), g3.xxxx - iadd r23.xyzw, r20.wwww, l(1975, 3950, 5925, 1024) - ld_structured r22.y, r23.x, l(0), g3.xxxx - ld_structured r22.z, r23.y, l(0), g3.xxxx - ld_structured r22.w, r23.z, l(0), g3.xxxx - add r21.xyz, r21.xyzx, -r22.xyzx - dp3 r24.x, r21.xyzx, r21.xyzx - add r24.x, r24.x, l(0.000000) - mad r21.w, r21.w, -r19.y, -r19.z - min r21.w, r21.w, l(0.000000) - rsq r24.x, r24.x - mad r24.x, r21.w, r24.x, l(1.000000) - max r24.x, r24.x, l(0.000000) - mul r24.x, r20.x, r24.x - mad r21.xyz, r24.xxxx, r21.xyzx, r22.xyzx - ge r21.w, r21.w, l(0.000000) - movc r21.w, r21.w, l(0), r22.w - store_structured g3.x, r20.w, l(0), r21.x - store_structured g3.x, r23.x, l(0), r21.y - store_structured g3.x, r23.y, l(0), r21.z - store_structured g3.x, r23.z, l(0), r21.w - mov r20.w, r23.w - endloop - endif - ld_raw r19.y, l(20), g1.xxxx - eq r19.z, r19.y, l(0.000000) - ld_raw r19.w, l(24), g0.xxxx - ieq r20.x, r19.w, l(0) - or r19.z, r19.z, r20.x - if_z r19.z - ld_raw r19.z, l(0), g0.xxxx - utof r20.x, r19.z - mul r19.y, r19.y, r20.x - utof r20.x, r19.w - div r19.y, r19.y, r20.x - ld_raw r20.xy, l(28), g0.xyxx - mov r20.z, vThreadIDInGroup.x - loop - uge r20.w, r20.z, r19.z - breakc_nz r20.w - ld_structured r20.w, r20.z, l(0), g3.xxxx - iadd r21.xyzw, r20.zzzz, l(1975, 3950, 5925, 1024) - ld_structured r22.x, r21.x, l(0), g3.xxxx - ld_structured r22.y, r21.y, l(0), g3.xxxx - ld_structured r22.z, r21.z, l(0), g3.xxxx - mov r23.xyz, l(0,0,0,0) - mov r22.w, r20.z - loop - uge r23.w, r22.w, r19.w - breakc_nz r23.w - iadd r23.w, r20.x, r22.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r23.w, r23.w, l(0), t5.xxxx - and r24.x, r23.w, l(0x0000ffff) - ld_structured r24.y, r24.x, l(0), g3.xxxx - iadd r24.xz, r24.xxxx, l(1975, 0, 3950, 0) - ld_structured r24.x, r24.x, l(0), g3.xxxx - ld_structured r24.z, r24.z, l(0), g3.xxxx - add r24.y, -r20.w, r24.y - add r24.xz, -r22.xxyx, r24.xxzx - mad r24.w, r24.y, r24.y, l(0.000000) - mad r24.w, r24.x, r24.x, r24.w - mad r24.w, r24.z, r24.z, r24.w - ushr r23.w, r23.w, l(16) - utof r23.w, r23.w - mul r23.w, r20.y, r23.w - rsq r24.w, r24.w - mad r23.w, -r23.w, r24.w, l(1.000000) - lt r24.w, l(0.000000), r23.w - mad r25.x, r24.y, r23.w, r23.x - mad r25.y, r24.x, r23.w, r23.y - mad r25.z, r24.z, r23.w, r23.z - movc r23.xyz, r24.wwww, r25.xyzx, r23.xyzx - iadd r22.w, r19.z, r22.w - endloop - mad r20.w, r23.x, r19.y, r20.w - mad r22.x, r23.y, r19.y, r22.x - mad r22.y, r23.z, r19.y, r22.y - store_structured g3.x, r20.z, l(0), r20.w - store_structured g3.x, r21.x, l(0), r22.x - store_structured g3.x, r21.y, l(0), r22.y - store_structured g3.x, r21.z, l(0), r22.z - mov r20.z, r21.w - endloop - endif - mov r19.y, l(0) - loop - ld_raw r19.z, l(8), g0.xxxx - uge r19.z, r19.y, r19.z - breakc_nz r19.z - ld_raw r20.xyz, l(12), g0.xyzx - iadd r19.z, r19.y, r20.x - ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r21.xyzw, r19.z, l(0), t3.xyzw - ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r19.zw, r19.z, l(16), t3.xxxy - ld_raw r20.x, l(108), g1.xxxx - mul r21.xy, r20.xxxx, r21.xyxx - exp r21.xy, r21.xyxx - add r21.xy, -r21.xyxx, l(1.000000, 1.000000, 0.000000, 0.000000) - iadd r20.y, r19.z, r20.y - ine r20.z, r20.z, l(-1) - ld_raw r20.w, l(20), g0.xxxx - iadd r19.z, r19.z, r20.w - sync_g_t - mov r20.w, vThreadIDInGroup.x - loop - uge r22.x, r20.w, r19.w - breakc_nz r22.x - iadd r22.x, r20.w, r20.y - ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r22.xy, r22.x, l(0), t4.xyxx - and r22.z, r22.y, l(0x0000ffff) - ushr r22.y, r22.y, l(16) - ld_structured r22.w, r22.z, l(0), g3.xxxx - iadd r24.xyz, r22.zzzz, l(1975, 3950, 5925, 0) - ld_structured r23.w, r24.x, l(0), g3.xxxx - ld_structured r24.w, r24.y, l(0), g3.xxxx - ld_structured r25.x, r24.z, l(0), g3.xxxx - ld_structured r25.y, r22.y, l(0), g3.xxxx - iadd r26.xyz, r22.yyyy, l(1975, 3950, 5925, 0) - ld_structured r25.z, r26.x, l(0), g3.xxxx - ld_structured r25.w, r26.y, l(0), g3.xxxx - ld_structured r26.w, r26.z, l(0), g3.xxxx - add r27.x, -r22.w, r25.y - add r27.y, -r23.w, r25.z - add r27.z, -r24.w, r25.w - mad r27.w, r27.x, r27.x, l(0.000000) - mad r27.w, r27.y, r27.y, r27.w - mad r27.w, r27.z, r27.z, r27.w - lt r28.x, l(0.000000), r22.x - rsq r27.w, r27.w - mad r22.x, r22.x, r27.w, l(-1.000000) - and r22.x, r22.x, r28.x - min r27.w, r21.w, -r22.x - max r27.w, r21.z, r27.w - mad r22.x, r21.y, r27.w, r22.x - iadd r27.w, r19.z, r20.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r27.w, r27.w, l(0), t16.xxxx - mul r27.w, r20.x, r27.w - exp r27.w, r27.w - add r27.w, -r27.w, l(1.000000) - movc r27.w, r20.z, r27.w, r21.x - mul r22.x, r22.x, r27.w - add r27.w, r25.x, l(0.000000) - add r27.w, r26.w, r27.w - div r22.x, r22.x, r27.w - mul r27.w, r22.x, -r25.x - mad r22.w, r27.w, r27.x, r22.w - mad r23.w, r27.w, r27.y, r23.w - mad r24.w, r27.w, r27.z, r24.w - store_structured g3.x, r22.z, l(0), r22.w - store_structured g3.x, r24.x, l(0), r23.w - store_structured g3.x, r24.y, l(0), r24.w - store_structured g3.x, r24.z, l(0), r25.x - mul r22.x, r22.x, r26.w - mad r22.z, r22.x, r27.x, r25.y - mad r22.w, r22.x, r27.y, r25.z - mad r22.x, r22.x, r27.z, r25.w - store_structured g3.x, r22.y, l(0), r22.z - store_structured g3.x, r26.x, l(0), r22.w - store_structured g3.x, r26.y, l(0), r22.x - store_structured g3.x, r26.z, l(0), r26.w - iadd r20.w, r20.w, l(1024) - endloop - iadd r19.y, r19.y, l(1) - endloop - sync_g_t - ld_raw r19.y, l(36), g1.xxxx - ine r19.y, r19.y, l(-1) - if_nz r19.y - ld_raw r19.y, l(0), g0.xxxx - ld_raw r19.zw, l(36), g1.xxxy - mov r20.x, vThreadIDInGroup.x - loop - uge r20.y, r20.x, r19.y - breakc_nz r20.y - iadd r20.yz, r19.zzwz, r20.xxxx - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r21.xyzw, r20.y, l(0), t12.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r22.xyzw, r20.z, l(0), t12.xyzw - add r22.xyzw, -r21.xyzw, r22.xyzw - mad r21.xyzw, r22.xyzw, r17.xxxx, r21.xyzw - ld_structured r22.x, r20.x, l(0), g3.xxxx - iadd r24.xyzw, r20.xxxx, l(1975, 3950, 5925, 1024) - ld_structured r22.y, r24.x, l(0), g3.xxxx - ld_structured r22.z, r24.y, l(0), g3.xxxx - ld_structured r20.y, r24.z, l(0), g3.xxxx - add r21.xyz, r21.xyzx, -r22.xyzx - dp3 r20.z, r21.xyzx, r21.xyzx - add r20.z, r20.z, l(0.000000) - rsq r20.z, r20.z - mad r20.z, -r21.w, r20.z, l(1.000000) - min r20.z, r20.z, l(0.000000) - mad r21.xyz, r20.zzzz, r21.xyzx, r22.xyzx - store_structured g3.x, r20.x, l(0), r21.x - store_structured g3.x, r24.x, l(0), r21.y - store_structured g3.x, r24.y, l(0), r21.z - store_structured g3.x, r24.z, l(0), r20.y - mov r20.x, r24.w - endloop - sync_g_t - endif - if_nz r1.x - ld_raw r19.y, l(0), g0.xxxx - iadd r19.z, r19.y, l(-1) - umin r19.z, r2.y, r19.z - ld_structured r20.x, r19.z, l(0), g3.xxxx - iadd r21.xyz, r19.zzzz, l(1975, 3950, 5925, 0) - ld_structured r20.y, r21.x, l(0), g3.xxxx - ld_structured r20.z, r21.y, l(0), g3.xxxx - ld_structured r20.w, r21.z, l(0), g3.xxxx - dp4 r19.w, r20.xyzw, icb[r4.x + 0].xyzw - mul r19.w, r0.z, r19.w - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.w - mov r19.w, r19.z - loop - iadd r20.x, r19.w, l(32) - uge r20.y, r20.x, r19.y - breakc_nz r20.y - ld_structured r20.y, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r21.x, r20.x, l(0), g3.xxxx - iadd r22.xyz, r19.wwww, l(2007, 3982, 5957, 0) - ld_structured r21.y, r22.x, l(0), g3.xxxx - ld_structured r21.z, r22.y, l(0), g3.xxxx - ld_structured r21.w, r22.z, l(0), g3.xxxx - dp4 r20.z, r21.xyzw, icb[r4.x + 0].xyzw - mul r20.z, r0.z, r20.z - max r20.y, r20.z, r20.y - store_structured g4.x, vThreadIDInGroup.x, l(0), r20.y - mov r19.w, r20.x - endloop - endif - sync_g_t - if_nz r1.y - ld_structured r19.y, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.z, r3.x, l(0), g4.xxxx - max r19.y, r19.z, r19.y - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.y - endif - sync_g_t - if_nz r1.y - ld_structured r19.y, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.z, r3.y, l(0), g4.xxxx - max r19.y, r19.z, r19.y - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.y - endif - sync_g_t - if_nz r1.y - ld_structured r19.y, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.z, r3.z, l(0), g4.xxxx - max r19.y, r19.z, r19.y - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.y - endif - sync_g_t - if_nz r1.y - ld_structured r19.y, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.z, r3.w, l(0), g4.xxxx - max r19.y, r19.z, r19.y - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.y - endif - sync_g_t - if_nz r1.y - ld_structured r19.y, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.z, r6.x, l(0), g4.xxxx - max r19.y, r19.z, r19.y - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.y - endif - sync_g_t - if_nz r0.w - ld_structured r19.y, vThreadIDInGroup.x, l(0), g4.xxxx - store_raw g1.x, r2.x, r19.y - endif - sync_g_t - ld_raw r19.y, l(16), g1.xxxx - utof r19.y, r19.y - div r19.x, r19.x, r19.y - ld_raw r19.y, l(60), g0.xxxx - if_nz r19.y - ld_raw r19.z, l(80), g0.xxxx - lt r19.z, l(0.000000), r19.z - ld_raw r19.w, l(0), g0.xxxx - ld_raw r20.x, l(64), g0.xxxx - ld_raw r20.yz, l(56), g1.xxyx - mov r20.w, vThreadIDInGroup.x - loop - uge r21.x, r20.w, r19.w - breakc_nz r21.x - ld_structured r21.x, r20.w, l(0), g3.xxxx - iadd r22.xyzw, r20.wwww, l(1975, 3950, 5925, 1024) - ld_structured r21.y, r22.x, l(0), g3.xxxx - ld_structured r21.z, r22.y, l(0), g3.xxxx - ld_structured r21.w, r22.z, l(0), g3.xxxx - mov r24.xyzw, l(0,0,0,0) - mov r23.w, l(0) - loop - uge r25.x, r23.w, r19.y - breakc_nz r25.x - iadd r25.x, r20.x, r23.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r25.x, r25.x, l(0), t8.xxxx - firstbit_lo r25.y, r25.x - iadd r25.yz, r20.yyzy, r25.yyyy - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r26.xyzw, r25.y, l(0), t9.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r27.xyzw, r25.z, l(0), t9.xyzw - add r27.xyzw, -r26.xyzw, r27.xyzw - mad r26.xyzw, r17.xxxx, r27.xyzw, r26.xyzw - dp3 r25.y, r21.xyzx, r26.xyzx - add r25.y, r26.w, r25.y - mov r27.xyz, r26.xyzx - mov r25.z, r25.x - mov r27.w, r25.y - loop - lt r25.w, r27.w, l(0.000000) - iadd r26.w, r25.z, l(-1) - and r25.z, r25.z, r26.w - ine r26.w, r25.z, l(0) - and r25.w, r25.w, r26.w - breakc_z r25.w - firstbit_lo r25.w, r25.z - iadd r28.xy, r20.yzyy, r25.wwww - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r29.xyzw, r28.x, l(0), t9.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r28.xyzw, r28.y, l(0), t9.xyzw - add r28.xyzw, -r29.xyzw, r28.xyzw - mad r28.xyzw, r17.xxxx, r28.xyzw, r29.xyzw - dp3 r25.w, r21.xyzx, r28.xyzx - add r28.w, r28.w, r25.w - lt r25.w, r27.w, r28.w - movc r27.xyzw, r25.wwww, r28.xyzw, r27.xyzw - endloop - lt r25.x, r27.w, l(0.000000) - mad r26.xyz, -r27.xyzx, r27.wwww, r24.xyzx - iadd r26.w, r24.w, l(1) - movc r24.xyzw, r25.xxxx, r26.xyzw, r24.xyzw - iadd r23.w, r23.w, l(1) - endloop - if_nz r24.w - utof r23.w, r24.w - div r23.w, l(1.000000, 1.000000, 1.000000, 1.000000), r23.w - if_nz r19.z - iadd r25.x, r0.x, r20.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r25.yzw, r25.x, l(0), u0.xxyz - ld_raw r26.x, l(80), g0.xxxx - dp3 r26.y, r24.xyzx, r24.xyzx - add r26.z, r26.y, l(0.000000) - rsq r26.z, r26.z - mul r28.xyz, r24.xyzx, r26.zzzz - add r29.xyz, r21.xyzx, -r25.yzwy - dp3 r26.w, r29.xyzx, r28.xyzx - mad r28.xyz, -r26.wwww, r28.xyzx, r29.xyzx - dp3 r26.w, r28.xyzx, r28.xyzx - add r26.w, r26.w, l(0.000000) - rsq r26.w, r26.w - mul r26.x, r26.y, -r26.x - mul r26.x, r26.z, r26.x - mul r26.x, r23.w, r26.x - mul r26.x, r26.w, r26.x - max r26.x, r26.x, l(-1.000000) - mad r25.yzw, -r28.xxyz, r26.xxxx, r25.yyzw - store_structured u0.xyz, r25.x, l(0), r25.yzwy - endif - mad r21.xyz, r24.xyzx, r23.wwww, r21.xyzx - store_structured g3.x, r20.w, l(0), r21.x - store_structured g3.x, r22.x, l(0), r21.y - store_structured g3.x, r22.y, l(0), r21.z - store_structured g3.x, r22.z, l(0), r21.w - endif - mov r20.w, r22.w - endloop - endif - ftoi r19.y, r17.x - ld_structured r20.x, r19.y, l(0), g3.xxxx - iadd r21.xyz, r19.yyyy, l(1975, 3950, 5925, 0) - ld_structured r20.y, r21.x, l(0), g3.xxxx - ld_structured r20.z, r21.y, l(0), g3.xxxx - ld_structured r19.z, r21.z, l(0), g3.xxxx - ld_raw r19.w, l(68), g0.xxxx - ld_raw r20.w, l(64), g1.xxxx - mov r22.xyz, l(0,0,0,0) - mov r25.xy, l(0,340282346638528860000000000000000000000.000000,0,0) - mov r21.w, l(0) - loop - uge r22.w, r21.w, r19.w - breakc_nz r22.w - imad r22.w, l(3), r21.w, r20.w - ld_structured_indexable(structured_buffer, stride=12)(mixed,mixed,mixed,mixed) r26.xyz, r22.w, l(0), t10.xyzx - iadd r25.zw, r22.wwww, l(0, 0, 1, 2) - ld_structured_indexable(structured_buffer, stride=12)(mixed,mixed,mixed,mixed) r28.xyz, r25.z, l(0), t10.xyzx - ld_structured_indexable(structured_buffer, stride=12)(mixed,mixed,mixed,mixed) r29.xyz, r25.w, l(0), t10.xyzx - add r28.xyz, -r26.xyzx, r28.xyzx - add r29.xyz, -r26.xyzx, r29.xyzx - mul r30.xyz, r28.zxyz, r29.yzxy - mad r30.xyz, r28.yzxy, r29.zxyz, -r30.xyzx - dp3 r22.w, r30.xyzx, r30.xyzx - rsq r22.w, r22.w - mul r30.xyz, r22.wwww, r30.xyzx - dp3 r22.w, r28.xyzx, r29.xyzx - dp3 r23.w, r28.xyzx, r28.xyzx - dp3 r25.z, r29.xyzx, r29.xyzx - mul r25.w, r22.w, r22.w - mad r25.w, r23.w, r25.z, -r25.w - div r25.w, l(1.000000, 1.000000, 1.000000, 1.000000), r25.w - add r26.w, r23.w, r25.z - mad r26.w, r22.w, l(-2.000000), r26.w - div r26.w, l(1.000000, 1.000000, 1.000000, 1.000000), r26.w - div r28.w, l(1.000000, 1.000000, 1.000000, 1.000000), r23.w - div r29.w, l(1.000000, 1.000000, 1.000000, 1.000000), r25.z - add r26.xyz, r20.xyzx, -r26.xyzx - dp3 r30.w, r26.xyzx, r28.xyzx - dp3 r31.x, r26.xyzx, r29.xyzx - dp3 r32.x, r26.xyzx, r30.xyzx - mul r31.y, r22.w, r31.x - mad r31.y, r25.z, r30.w, -r31.y - mul r31.z, r22.w, r30.w - mad r23.w, r23.w, r31.x, -r31.z - lt r31.z, l(0.000000), r23.w - mul r31.y, r25.w, r31.y - mul r28.w, r28.w, r30.w - movc r28.w, r31.z, r31.y, r28.w - lt r31.y, l(0.000000), r28.w - mul r23.w, r25.w, r23.w - mul r25.w, r29.w, r31.x - movc r23.w, r31.y, r23.w, r25.w - add r25.w, r23.w, r28.w - lt r25.w, l(1.000000), r25.w - add r22.w, -r22.w, r25.z - add r22.w, r30.w, r22.w - add r22.w, -r31.x, r22.w - mul r22.w, r26.w, r22.w - movc_sat r22.w, r25.w, r22.w, r28.w - add r25.z, -r22.w, l(1.000000) - min r23.w, r23.w, r25.z - max r23.w, r23.w, l(0.000000) - mul r29.xyz, r23.wwww, r29.xyzx - mad r28.xyz, r28.xyzx, r22.wwww, r29.xyzx - add r26.xyz, r26.xyzx, -r28.xyzx - dp3 r22.w, r26.xyzx, r26.xyzx - lt r23.w, r32.x, l(0.000000) - mul r25.z, r22.w, l(1.000100) - movc r32.y, r23.w, r25.z, r22.w - lt r22.w, r32.y, r25.y - movc r22.xyz, r22.wwww, r30.xyzx, r22.xyzx - movc r25.xy, r22.wwww, r32.xyxx, r25.xyxx - iadd r21.w, r21.w, l(1) - endloop - lt r19.w, r25.x, l(0.000000) - if_nz r19.w - mad r20.xyz, -r22.xyzx, r25.xxxx, r20.xyzx - store_structured g3.x, r19.y, l(0), r20.x - store_structured g3.x, r21.x, l(0), r20.y - store_structured g3.x, r21.y, l(0), r20.z - store_structured g3.x, r21.z, l(0), r19.z - endif - ld_raw r19.y, l(72), g0.xxxx - if_nz r19.y - ld_raw r19.y, l(80), g0.xxxx - lt r19.z, l(0.000000), r19.y - ld_raw r19.w, l(0), g0.xxxx - ld_raw r20.xy, l(48), g1.xyxx - ld_raw r20.zw, l(44), g0.xxxy - mov r21.x, vThreadIDInGroup.x - loop - uge r21.y, r21.x, r19.w - breakc_nz r21.y - ld_structured r26.x, r21.x, l(0), g3.xxxx - iadd r28.xyzw, r21.xxxx, l(1975, 3950, 5925, 1024) - ld_structured r26.y, r28.x, l(0), g3.xxxx - ld_structured r26.z, r28.y, l(0), g3.xxxx - ld_structured r21.y, r28.z, l(0), g3.xxxx - iadd r21.z, r0.x, r21.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r25.yzw, r21.z, l(0), u0.xxyz - mov r29.xyz, r26.xyzx - mov r30.xyz, l(0,0,0,0) - mov r31.xyzw, l(0,0,0,0) - mov r21.w, l(0) - loop - uge r22.w, r21.w, r20.z - breakc_nz r22.w - iadd r22.w, r20.w, r21.w - ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r32.xy, r22.w, l(0), t6.xyxx - iadd r32.xyzw, r20.xyxy, r32.xxyy - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r33.xyzw, r32.x, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r34.xyzw, r32.y, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r35.xyzw, r32.z, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r32.xyzw, r32.w, l(0), t7.xyzw - add r36.xyzw, -r33.xyzw, r34.xyzw - mad r37.xyzw, r19.xxxx, r36.xyzw, r33.xyzw - add r38.xyzw, -r35.xyzw, r32.xyzw - mad r39.xyzw, r19.xxxx, r38.xyzw, r35.xyzw - max r37.w, r37.w, l(0.000000) - max r39.w, r39.w, l(0.000000) - add r40.xyzw, -r37.xyzw, r39.xyzw - mul r40.xyzw, r40.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) - dp3 r22.w, r40.xyzx, r40.xyzx - ge r23.w, l(0.000000), r22.w - if_nz r23.w - iadd r23.w, r21.w, l(1) - mov r21.w, r23.w - continue - endif - mad r36.xyzw, r17.xxxx, r36.xyzw, r33.xyzw - mad r38.xyzw, r17.xxxx, r38.xyzw, r35.xyzw - max r36.w, r36.w, l(0.000000) - max r38.w, r38.w, l(0.000000) - add r41.xyzw, -r36.xyzw, r38.xyzw - mul r42.xyzw, r41.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) - dp3 r23.w, r42.xyzx, r42.xyzx - mad r26.w, -r42.w, r42.w, r23.w - ge r29.w, l(0.000000), r26.w - if_nz r29.w - iadd r29.w, r21.w, l(1) - mov r21.w, r29.w - continue - endif - add r41.xyz, r37.zxyz, r39.zxyz - mad r41.xyz, -r41.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r25.wyzw - mad r29.w, -r40.w, r40.w, r22.w - rsq r22.w, r22.w - rsq r29.w, r29.w - mul r40.xyz, r22.wwww, r40.xyzx - mul r22.w, r29.w, r40.w - mul r43.xyz, r40.yzxy, r41.xyzx - mad r41.xyz, r41.zxyz, r40.zxyz, -r43.xyzx - dp3 r29.w, r25.yzwy, r40.xyzx - add r40.xyz, r36.xyzx, r38.xyzx - mad r43.xyz, -r40.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r29.xyzx - rsq r30.w, r23.w - rsq r26.w, r26.w - mul r23.w, r23.w, r30.w - mad r32.w, r41.w, l(0.500000), r36.w - mul r32.w, r26.w, r32.w - mul r32.w, r23.w, r32.w - mul r44.xyz, r30.wwww, r42.xyzx - mul r45.xyz, r43.zxyz, r44.yzxy - mad r45.xyz, r43.yzxy, r44.zxyz, -r45.xyzx - dp3 r33.w, r29.xyzx, r44.xyzx - dp3 r34.w, r45.xyzx, r45.xyzx - add r46.x, r34.w, l(0.000000) - mad r29.w, r29.w, r22.w, r32.w - max r29.w, r29.w, l(0.000000) - mul r26.w, r26.w, r42.w - mad r33.w, r33.w, r26.w, r32.w - max r46.y, r33.w, l(0.000000) - dp3 r33.w, r41.xyzx, r41.xyzx - mad r33.w, -r41.x, r41.x, r33.w - mad r33.w, -r29.w, r29.w, r33.w - dp3 r34.w, r41.xyzx, r45.xyzx - mad r34.w, -r29.w, r46.y, r34.w - mad r35.w, -r46.y, r46.y, r46.x - mul r36.w, r33.w, r35.w - mad r36.w, r34.w, r34.w, -r36.w - sqrt r37.w, r36.w - add r33.w, -r33.w, r34.w - add r34.w, r34.w, -r35.w - add r34.w, r33.w, r34.w - add r35.w, r37.w, r33.w - min r35.w, r35.w, l(0.000000) - div r35.w, r35.w, r34.w - lt r38.w, r35.w, l(1.000000) - lt r39.w, r33.w, r37.w - and r38.w, r38.w, r39.w - mul r33.w, r33.w, r34.w - add r39.w, -r29.w, r46.y - mad r29.w, r33.w, r39.w, r29.w - mul r29.w, r29.w, r29.w - mul r29.w, r34.w, r29.w - mul r29.w, r29.w, l(-0.360000) - lt r29.w, r29.w, r36.w - and r29.w, r29.w, r38.w - lt r33.w, r34.w, l(-0.000000) - and r29.w, r29.w, r33.w - add r41.xyz, r25.yzwy, -r29.xyzx - mad r45.xyz, -r41.xyzx, r35.wwww, r25.yzwy - mul r47.xyz, r23.wwww, r42.xyzx - add r37.xyz, -r37.xyzx, r39.xyzx - mul r37.xyz, r37.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000) - dp3 r33.w, r37.xyzx, r37.xyzx - rsq r36.w, r33.w - mul r33.w, r33.w, r36.w - mad r37.xyz, -r37.xyzx, r33.wwww, r47.xyzx - add r33.w, -r35.w, l(1.000000) - mad r39.xyz, -r37.xyzx, r33.wwww, r47.xyzx - mul r35.w, r26.w, r35.w - mad r22.w, r22.w, r33.w, r35.w - dp3 r35.w, r39.xyzx, r39.xyzx - rsq r35.w, r35.w - dp3 r36.w, r45.xyzx, r39.xyzx - mul r36.w, r35.w, r36.w - dp3 r38.w, r45.xyzx, r45.xyzx - mad r38.w, -r36.w, r36.w, r38.w - lt r39.x, l(0.000000), r38.w - rsq r39.y, r38.w - and r39.x, r39.y, r39.x - mul r22.w, r22.w, r38.w - mad r22.w, r22.w, r39.x, r36.w - mul r22.w, r35.w, r22.w - lt r35.w, |r22.w|, l(1.000000) - mad r37.xyz, r37.xyzx, r22.wwww, r41.xyzx - mul r22.w, r33.w, r34.w - div r22.w, r37.w, r22.w - add r22.w, -r22.w, l(1.000000) - div r22.w, r33.w, r22.w - mad r37.xyz, r37.xyzx, r22.wwww, r43.xyzx - mad r39.xyz, r40.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r37.xyzx - movc r39.xyz, r35.wwww, r39.xyzx, r29.xyzx - movc r39.xyz, r29.wwww, r39.xyzx, r29.xyzx - mad r40.xyz, -r40.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r39.xyzx - dp3 r22.w, r40.xyzx, r44.xyzx - mad r33.w, r22.w, r26.w, r32.w - max r33.w, r33.w, l(0.000000) - dp3 r34.w, r40.xyzx, r40.xyzx - mad r34.w, -r22.w, r22.w, r34.w - mul r36.w, r33.w, r33.w - lt r36.w, r36.w, r34.w - if_nz r36.w - iadd r36.w, r21.w, l(1) - mov r29.xyz, r39.xyzx - mov r21.w, r36.w - continue - endif - mul r30.w, r30.w, r42.w - mad r30.w, -r30.w, r30.w, l(1.000000) - max r34.w, r34.w, l(0.000000) - rsq r36.w, r34.w - mul r34.w, r26.w, r34.w - mad r34.w, r34.w, r36.w, r22.w - lt r23.w, |r34.w|, r23.w - mad r40.xyz, -r34.wwww, r42.xyzx, r40.xyzx - mul r33.w, r33.w, r36.w - mad r30.w, r33.w, r30.w, -r30.w - mad r40.xyz, r40.xyzx, r30.wwww, r30.xyzx - add r34.xyz, -r33.xyzx, r34.xyzx - mad r33.xyz, r19.xxxx, r34.xyzx, r33.xyzx - add r32.xyz, -r35.xyzx, r32.xyzx - mad r32.xyz, r19.xxxx, r32.xyzx, r35.xyzx - mad r22.w, r22.w, l(0.500000), l(0.500000) - add r33.xyz, -r33.xyzx, r36.xyzx - add r32.xyz, -r32.xyzx, r38.xyzx - add r32.xyz, -r33.xyzx, r32.xyzx - mad r32.xyz, r22.wwww, r32.xyzx, r33.xyzx - add r32.xyz, r31.xyzx, r32.xyzx - movc r33.xyz, r19.zzzz, r32.xyzx, r31.xyzx - iadd r33.w, r31.w, l(1) - movc r32.xyz, r23.wwww, r40.xyzx, r30.xyzx - movc r33.xyzw, r23.wwww, r33.xyzw, r31.xyzw - dp3 r22.w, r37.xyzx, r42.xyzx - mad r23.w, r22.w, r26.w, r32.w - max r34.y, r23.w, l(0.000000) - dp3 r23.w, r37.xyzx, r37.xyzx - mad r34.x, -r22.w, r22.w, r23.w - movc r34.xy, r35.wwww, r34.xyxx, r46.xyxx - movc r34.xy, r29.wwww, r34.xyxx, r46.xyxx - mul r22.w, r34.y, r34.y - ge r22.w, r34.x, r22.w - if_nz r22.w - iadd r22.w, r21.w, l(1) - mov r29.xyz, r39.xyzx - mov r30.xyz, r32.xyzx - mov r31.xyzw, r33.xyzw - mov r21.w, r22.w - continue - endif - mov r29.xyz, r39.xyzx - mov r30.xyz, r32.xyzx - mov r31.xyzw, r33.xyzw - iadd r21.w, r21.w, l(1) - endloop - ld_raw r21.w, l(52), g0.xxxx - mov r32.xyz, r29.xyzx - mov r33.xyz, r30.xyzx - mov r34.xyzw, r31.xyzw - mov r22.w, l(0) - loop - uge r23.w, r22.w, r21.w - breakc_nz r23.w - iadd r35.xy, r20.xyxx, r22.wwww - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r36.xyzw, r35.x, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r35.xyzw, r35.y, l(0), t7.xyzw - add r35.xyzw, -r36.xyzw, r35.xyzw - mad r37.xyzw, r17.xxxx, r35.xyzw, r36.xyzw - max r23.w, r37.w, l(0.000000) - mad r35.xyz, r19.xxxx, r35.xyzx, r36.xyzx - add r36.xyz, r32.xyzx, -r37.xyzx - add r38.xyz, r25.yzwy, -r35.xyzx - dp3 r26.w, r36.xyzx, r36.xyzx - add r36.w, r26.w, l(0.000000) - dp3 r26.w, r38.xyzx, r38.xyzx - mul r29.w, r23.w, r23.w - mad r26.w, -r23.w, r23.w, r26.w - dp3 r30.w, r38.xyzx, r36.xyzx - mad r30.w, -r23.w, r23.w, r30.w - mad r32.w, -r23.w, r23.w, r36.w - mul r33.w, r26.w, r32.w - mad r33.w, r30.w, r30.w, -r33.w - sqrt r35.w, r33.w - add r26.w, -r26.w, r30.w - add r30.w, r30.w, -r32.w - add r30.w, r26.w, r30.w - add r32.w, r35.w, r26.w - min r32.w, r32.w, l(0.000000) - div r32.w, r32.w, r30.w - lt r37.w, r32.w, l(1.000000) - lt r26.w, r26.w, r35.w - and r26.w, r26.w, r37.w - mul r29.w, r29.w, r30.w - mul r29.w, r29.w, l(-0.360000) - lt r29.w, r29.w, r33.w - and r26.w, r26.w, r29.w - lt r29.w, r30.w, l(-0.000000) - and r26.w, r26.w, r29.w - add r38.xyz, -r36.xyzx, r38.xyzx - add r29.w, -r32.w, l(1.000000) - mul r30.w, r29.w, r30.w - div r30.w, r35.w, r30.w - add r30.w, -r30.w, l(1.000000) - div r29.w, r29.w, r30.w - mad r38.xyz, r38.xyzx, r29.wwww, r36.xyzx - add r39.xyz, r37.xyzx, r38.xyzx - dp3 r29.w, r38.xyzx, r38.xyzx - add r38.w, r29.w, l(0.000000) - movc r32.xyz, r26.wwww, r39.xyzx, r32.xyzx - movc r36.xyzw, r26.wwww, r38.xyzw, r36.xyzw - rsq r26.w, r36.w - mul r29.w, r23.w, r26.w - lt r29.w, l(1.000000), r29.w - mad r23.w, r26.w, r23.w, l(-1.000000) - mad r36.xyz, r36.xyzx, r23.wwww, r33.xyzx - add r35.xyz, -r35.xyzx, r37.xyzx - add r35.xyz, r34.xyzx, r35.xyzx - movc r35.xyz, r19.zzzz, r35.xyzx, r34.xyzx - iadd r35.w, r34.w, l(1) - movc r33.xyz, r29.wwww, r36.xyzx, r33.xyzx - movc r34.xyzw, r29.wwww, r35.xyzw, r34.xyzw - iadd r22.w, r22.w, l(1) - endloop - if_nz r34.w - utof r21.w, r34.w - div r21.w, l(1.000000, 1.000000, 1.000000, 1.000000), r21.w - if_nz r19.z - ld_raw r22.w, l(80), g0.xxxx - dp3 r23.w, r33.xyzx, r33.xyzx - add r26.w, r23.w, l(0.000000) - rsq r26.w, r26.w - mul r32.xyz, r26.wwww, r33.xyzx - add r35.xyz, -r25.yzwy, r26.xyzx - mad r35.xyz, -r34.xyzx, r21.wwww, r35.xyzx - dp3 r29.w, r35.xyzx, r32.xyzx - mad r32.xyz, -r29.wwww, r32.xyzx, r35.xyzx - dp3 r29.w, r32.xyzx, r32.xyzx - add r29.w, r29.w, l(0.000000) - rsq r29.w, r29.w - mul r22.w, -r22.w, r23.w - mul r22.w, r26.w, r22.w - mul r22.w, r21.w, r22.w - mul r22.w, r29.w, r22.w - max r22.w, r22.w, l(-1.000000) - mad r25.yzw, -r32.xxyz, r22.wwww, r25.yyzw - store_structured u0.xyz, r21.z, l(0), r25.yzwy - endif - mad r25.yzw, r33.xxyz, r21.wwww, r26.xxyz - store_structured g3.x, r21.x, l(0), r25.y - store_structured g3.x, r28.x, l(0), r25.z - store_structured g3.x, r28.y, l(0), r25.w - store_structured g3.x, r28.z, l(0), r21.y - endif - mov r21.x, r28.w - endloop - else - ld_raw r19.yz, l(76), g0.xxyx - lt r19.yz, l(0.000000, 0.000000, 0.000000, 0.000000), r19.zzyz - ld_raw r19.w, l(0), g0.xxxx - ld_raw r20.xy, l(48), g1.xyxx - ld_raw r20.z, l(80), g0.xxxx - lt r20.w, l(0.000000), r20.z - ld_raw r21.xy, l(44), g0.xyxx - mov r21.z, vThreadIDInGroup.x - loop - uge r21.w, r21.z, r19.w - breakc_nz r21.w - ld_structured r26.x, r21.z, l(0), g3.xxxx - iadd r28.xyzw, r21.zzzz, l(1975, 3950, 5925, 1024) - ld_structured r26.y, r28.x, l(0), g3.xxxx - ld_structured r26.z, r28.y, l(0), g3.xxxx - ld_structured r21.w, r28.z, l(0), g3.xxxx - mov r25.yzw, l(0,0,0,0) - mov r32.xyzw, l(0,0,0,0) - mov r22.w, l(0) - loop - uge r23.w, r22.w, r21.x - breakc_nz r23.w - iadd r23.w, r21.y, r22.w - ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r35.xy, r23.w, l(0), t6.xyxx - iadd r35.xyzw, r20.xyxy, r35.xxyy - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r36.xyzw, r35.x, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r37.xyzw, r35.y, l(0), t7.xyzw - add r38.xyzw, -r36.xyzw, r37.xyzw - mad r38.xyzw, r17.xxxx, r38.xyzw, r36.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r39.xyzw, r35.z, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r35.xyzw, r35.w, l(0), t7.xyzw - add r40.xyzw, -r39.xyzw, r35.xyzw - mad r40.xyzw, r17.xxxx, r40.xyzw, r39.xyzw - max r38.w, r38.w, l(0.000000) - max r40.w, r40.w, l(0.000000) - add r41.xyzw, -r38.xyzw, r40.xyzw - mul r42.xyzw, r41.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) - dp3 r23.w, r42.xyzx, r42.xyzx - mad r26.w, -r42.w, r42.w, r23.w - ge r29.w, l(0.000000), r26.w - if_nz r29.w - iadd r29.w, r22.w, l(1) - mov r22.w, r29.w - continue - endif - rsq r29.w, r23.w - rsq r26.w, r26.w - mul r23.w, r23.w, r29.w - add r41.xyz, r38.xyzx, r40.xyzx - mad r30.w, r41.w, l(0.500000), r38.w - mul r30.w, r26.w, r30.w - mul r30.w, r23.w, r30.w - mul r42.xyz, r29.wwww, r42.xyzx - mul r26.w, r26.w, r42.w - mad r41.xyz, -r41.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r26.xyzx - dp3 r33.w, r41.xyzx, r42.xyzx - mad r30.w, r33.w, r26.w, r30.w - max r30.w, r30.w, l(0.000000) - dp3 r35.w, r41.xyzx, r41.xyzx - mad r35.w, -r33.w, r33.w, r35.w - mul r36.w, r30.w, r30.w - lt r36.w, r36.w, r35.w - if_nz r36.w - iadd r36.w, r22.w, l(1) - mov r22.w, r36.w - continue - endif - mul r29.w, r29.w, r42.w - mad r29.w, -r29.w, r29.w, l(1.000000) - max r35.w, r35.w, l(0.000000) - rsq r36.w, r35.w - mul r26.w, r26.w, r35.w - mad r26.w, r26.w, r36.w, r33.w - lt r23.w, |r26.w|, r23.w - mad r41.xyz, -r26.wwww, r42.xyzx, r41.xyzx - mul r26.w, r30.w, r36.w - mad r26.w, r26.w, r29.w, -r29.w - mad r41.xyz, r41.xyzx, r26.wwww, r25.yzwy - add r37.xyz, -r36.xyzx, r37.xyzx - mad r36.xyz, r19.xxxx, r37.xyzx, r36.xyzx - add r35.xyz, -r39.xyzx, r35.xyzx - mad r35.xyz, r19.xxxx, r35.xyzx, r39.xyzx - mad r26.w, r33.w, l(0.500000), l(0.500000) - add r36.xyz, -r36.xyzx, r38.xyzx - add r35.xyz, -r35.xyzx, r40.xyzx - add r35.xyz, -r36.xyzx, r35.xyzx - mad r35.xyz, r26.wwww, r35.xyzx, r36.xyzx - add r35.xyz, r32.xyzx, r35.xyzx - movc r35.xyz, r20.wwww, r35.xyzx, r32.xyzx - iadd r35.w, r32.w, l(1) - movc r25.yzw, r23.wwww, r41.xxyz, r25.yyzw - movc r32.xyzw, r23.wwww, r35.xyzw, r32.xyzw - iadd r22.w, r22.w, l(1) - endloop - ld_raw r22.w, l(52), g0.xxxx - mov r35.xyz, r25.yzwy - mov r36.xyzw, r32.xyzw - mov r23.w, l(0) - loop - uge r26.w, r23.w, r22.w - breakc_nz r26.w - iadd r37.xy, r20.xyxx, r23.wwww - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r38.xyzw, r37.x, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r37.xyzw, r37.y, l(0), t7.xyzw - add r37.xyzw, -r38.xyzw, r37.xyzw - mad r39.xyzw, r17.xxxx, r37.xyzw, r38.xyzw - max r26.w, r39.w, l(0.000000) - add r40.xyz, r26.xyzx, -r39.xyzx - dp3 r29.w, r40.xyzx, r40.xyzx - add r29.w, r29.w, l(0.000000) - rsq r29.w, r29.w - mul r30.w, r26.w, r29.w - lt r30.w, l(1.000000), r30.w - mad r26.w, r29.w, r26.w, l(-1.000000) - mad r40.xyz, r40.xyzx, r26.wwww, r35.xyzx - mad r37.xyz, r19.xxxx, r37.xyzx, r38.xyzx - add r37.xyz, -r37.xyzx, r39.xyzx - add r37.xyz, r36.xyzx, r37.xyzx - movc r37.xyz, r20.wwww, r37.xyzx, r36.xyzx - iadd r37.w, r36.w, l(1) - movc r35.xyz, r30.wwww, r40.xyzx, r35.xyzx - movc r36.xyzw, r30.wwww, r37.xyzw, r36.xyzw - iadd r23.w, r23.w, l(1) - endloop - if_nz r36.w - utof r22.w, r36.w - div r22.w, l(1.000000, 1.000000, 1.000000, 1.000000), r22.w - if_nz r19.y - iadd r23.w, r0.x, r21.z - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r37.xyz, r23.w, l(0), u0.xyzx - ld_raw r26.w, l(80), g0.xxxx - dp3 r29.w, r35.xyzx, r35.xyzx - add r30.w, r29.w, l(0.000000) - rsq r30.w, r30.w - mul r38.xyz, r30.wwww, r35.xyzx - add r39.xyz, r26.xyzx, -r37.xyzx - mad r39.xyz, -r36.xyzx, r22.wwww, r39.xyzx - dp3 r33.w, r39.xyzx, r38.xyzx - mad r38.xyz, -r33.wwww, r38.xyzx, r39.xyzx - dp3 r33.w, r38.xyzx, r38.xyzx - add r33.w, r33.w, l(0.000000) - rsq r33.w, r33.w - mul r26.w, -r26.w, r29.w - mul r26.w, r30.w, r26.w - mul r26.w, r22.w, r26.w - mul r26.w, r33.w, r26.w - max r26.w, r26.w, l(-1.000000) - mad r37.xyz, -r38.xyzx, r26.wwww, r37.xyzx - store_structured u0.xyz, r23.w, l(0), r37.xyzx - endif - mad r26.xyz, r35.xyzx, r22.wwww, r26.xyzx - dp3 r22.w, r35.xyzx, r35.xyzx - ld_raw r23.w, l(76), g0.xxxx - mad r22.w, r23.w, r22.w, l(1.000000) - div r22.w, r21.w, r22.w - movc r21.w, r19.z, r22.w, r21.w - store_structured g3.x, r21.z, l(0), r26.x - store_structured g3.x, r28.x, l(0), r26.y - store_structured g3.x, r28.y, l(0), r26.z - store_structured g3.x, r28.z, l(0), r21.w - endif - mov r21.z, r28.w - endloop - endif - ld_raw r17.x, l(84), g0.xxxx - ld_raw r19.x, l(72), g1.xxxx - min r17.x, r17.x, r19.x - lt r17.x, l(0.000000), r17.x - if_nz r17.x - ld_raw r17.x, l(88), g0.xxxx - ld_raw r19.x, l(0), g0.xxxx - if_nz r1.z - ld_raw r19.yz, r4.z, g1.xxyx - add r19.w, r19.z, r19.y - mad r19.yz, r19.wwww, l(0.000000, 0.000100, 0.000100, 0.000000), r19.zzyz - add r19.z, r19.y, r19.z - store_structured g6.x, vThreadIDInGroup.x, l(0), r19.z - else - mov r19.yz, l(0,0,0,0) - endif - sync_g_t - if_nz r1.z - ld_structured r19.w, l(0), l(0), g6.xxxx - ld_structured r20.x, l(1), l(0), g6.xxxx - lt r19.w, r20.x, r19.w - and r20.x, r19.w, l(1) - ld_structured r20.x, r20.x, l(0), g6.xxxx - ld_structured r20.y, l(2), l(0), g6.xxxx - lt r20.x, r20.y, r20.x - movc r19.w, r20.x, l(-2), r19.w - iadd r19.w, r19.w, vThreadIDInGroup.x - ushr r20.x, r19.w, l(30) - iadd r19.w, r19.w, r20.x - div r19.z, l(127.000000), r19.z - ld_raw r20.x, l(84), g0.xxxx - div r20.x, l(1.000000, 1.000000, 1.000000, 1.000000), r20.x - min r19.z, r19.z, r20.x - ishl r19.w, r19.w, l(2) - iadd r20.xy, r19.wwww, l(12, 24, 0, 0) - store_raw g5.x, r20.x, r19.z - mul r19.y, r19.y, r19.z - store_raw g5.x, r19.w, r19.y - store_raw g5.x, r20.y, vThreadIDInGroup.x - endif - sync_g_t - ld_raw r19.y, l(100), g0.xxxx - ishl r19.z, r17.x, l(1) - iadd r19.y, r19.z, r19.y - ld_raw r19.z, l(116), g1.xxxx - if_nz r19.z - mov r19.z, vThreadIDInGroup.x - loop - ige r19.w, r19.z, l(0x00004103) - breakc_nz r19.w - iadd r19.w, r19.z, r19.y - store_structured u2.x, r19.w, l(0), l(-1) - iadd r19.z, r19.z, l(1024) - endloop - endif - ld_raw r19.zw, l(16), g5.xxxy - ld_raw r20.xy, l(4), g5.xyxx - ld_raw r20.zw, l(28), g5.xxxy - ld_raw r21.x, l(92), g0.xxxx - ine r21.y, r21.x, l(-1) - ld_raw r21.z, l(100), g0.xxxx - mov r21.w, vThreadIDInGroup.x - loop - ige r22.w, r21.w, r17.x - breakc_nz r22.w - iadd r22.w, r21.w, r21.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r22.w, r22.w, l(0), t15.xxxx - movc r22.w, r21.y, r22.w, r21.w - ld_structured r26.x, r22.w, l(0), g3.xxxx - iadd r28.xyz, r22.wwww, l(1975, 3950, 5925, 0) - ld_structured r26.y, r28.x, l(0), g3.xxxx - ld_structured r26.z, r28.y, l(0), g3.xxxx - ld_structured r26.w, r28.z, l(0), g3.xxxx - dp4 r23.w, r26.xyzw, icb[r20.z + 0].xyzw - mad r23.w, r23.w, r19.z, r20.x - min r23.w, r23.w, l(127.500000) - max r23.w, r23.w, l(0.000000) - ftoi r23.w, r23.w - dp4 r26.x, r26.xyzw, icb[r20.w + 0].xyzw - mad r26.x, r26.x, r19.w, r20.y - min r26.x, r26.x, l(127.500000) - max r26.x, r26.x, l(0.000000) - ftoi r26.x, r26.x - iadd r26.y, r21.w, r21.z - ishl r26.x, r26.x, l(23) - imad r23.w, r23.w, l(0x00010000), r26.x - iadd r23.w, r23.w, l(0x00810000) - or r22.w, r22.w, r23.w - store_structured u2.x, r26.y, l(0), r22.w - iadd r21.w, r21.w, l(1024) - endloop - sync_g_t - ld_raw r21.xy, l(96), g0.xyxx - iadd r21.z, r17.x, r21.y - mov r26.x, vThreadIDInGroup.x - loop - ige r21.w, r26.x, r19.x - breakc_nz r21.w - iadd r21.w, r21.x, r26.x - ld_structured r28.x, r26.x, l(0), g3.xxxx - iadd r26.xyzw, r26.xxxx, l(1024, 1975, 3950, 5925) - ld_structured r28.y, r26.y, l(0), g3.xxxx - ld_structured r28.z, r26.z, l(0), g3.xxxx - ld_structured r28.w, r26.w, l(0), g3.xxxx - store_structured u1.xyzw, r21.w, l(0), r28.xyzw - endloop - sync_g_t - iadd r21.x, r17.x, l(31) - ubfe r21.w, l(5), l(5), r21.x - ushr r21.x, r21.x, l(10) - ult r22.w, r4.y, r21.w - and r23.w, r22.w, l(1) - iadd r23.w, r21.x, r23.w - movc r26.x, r22.w, l(0), l(1) - imul null, r26.x, r21.w, r26.x - imad r26.x, r4.y, r23.w, r26.x - ishl r26.y, r26.x, l(5) - ishl r23.w, r23.w, l(5) - iadd r23.w, r23.w, r26.y - umin r23.w, r17.x, r23.w - bfi r26.x, l(27), l(5), r26.x, vThreadIDInGroup.x - mov r26.y, l(16) - mov r26.zw, r21.yyyz - loop - uge r28.x, r26.y, l(32) - breakc_nz r28.x - mov r28.xy, l(0,0,0,0) - mov r28.z, r26.x - loop - uge r28.w, r28.y, r21.x - breakc_nz r28.w - ult r28.w, r28.z, r23.w - iadd r29.w, r26.z, r28.z - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r29.w, r29.w, l(0), u2.xxxx - movc r28.w, r28.w, r29.w, l(-1) - ushr r28.w, r28.w, r26.y - and r37.xyzw, r28.wwww, l(1, 2, 4, 8) - ine r37.xyzw, r37.xyzw, l(0, 0, 0, 0) - bfi r37.xyzw, l(1, 1, 1, 1), vThreadIDInGroup.xxxx, r37.xyzw, l(0, 0, 0, 0) - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - sync_g_t - if_nz r7.x - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.x, l(0), g3.xxxx - ld_structured r38.y, r6.y, l(0), g3.xxxx - ld_structured r38.z, r9.x, l(0), g3.xxxx - ld_structured r38.w, r6.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - sync_g_t - if_nz r7.y - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.y, l(0), g3.xxxx - ld_structured r38.y, r6.w, l(0), g3.xxxx - ld_structured r38.z, r9.y, l(0), g3.xxxx - ld_structured r38.w, r8.x, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - sync_g_t - if_nz r7.z - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.z, l(0), g3.xxxx - ld_structured r38.y, r8.y, l(0), g3.xxxx - ld_structured r38.z, r9.z, l(0), g3.xxxx - ld_structured r38.w, r8.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - sync_g_t - if_nz r7.w - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.w, l(0), g3.xxxx - ld_structured r38.y, r8.w, l(0), g3.xxxx - ld_structured r38.z, r9.w, l(0), g3.xxxx - ld_structured r38.w, r13.x, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - sync_g_t - if_nz r4.w - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r6.x, l(0), g3.xxxx - ld_structured r38.y, r13.y, l(0), g3.xxxx - ld_structured r38.z, r14.x, l(0), g3.xxxx - ld_structured r38.w, r13.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - sync_g_t - ld_structured r28.w, r5.z, l(0), g3.xxxx - ld_structured r29.w, r10.x, l(0), g3.xxxx - ld_structured r30.w, r10.y, l(0), g3.xxxx - ld_structured r33.w, r10.z, l(0), g3.xxxx - xor r28.w, r2.z, r28.w - xor r29.w, r2.w, r29.w - and r28.w, r28.w, r29.w - xor r29.w, r5.x, r30.w - and r28.w, r28.w, r29.w - xor r29.w, r5.y, r33.w - and r28.w, r28.w, r29.w - countbits r28.w, r28.w - iadd r28.x, r28.w, r28.x - iadd r28.yz, r28.yyzy, l(0, 1, 32, 0) - endloop - if_nz r21.w - iadd r28.y, r26.z, r28.z - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r28.y, r28.y, l(0), u2.xxxx - if_nz r22.w - ult r28.w, r28.z, r23.w - movc r28.y, r28.w, r28.y, l(-1) - ushr r28.y, r28.y, r26.y - and r37.xyzw, r28.yyyy, l(1, 2, 4, 8) - ine r37.xyzw, r37.xyzw, l(0, 0, 0, 0) - bfi r37.xyzw, l(1, 1, 1, 1), vThreadIDInGroup.xxxx, r37.xyzw, l(0, 0, 0, 0) - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - sync_g_t - if_nz r22.w - if_nz r7.x - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.x, l(0), g3.xxxx - ld_structured r38.y, r6.y, l(0), g3.xxxx - ld_structured r38.z, r9.x, l(0), g3.xxxx - ld_structured r38.w, r6.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - if_nz r7.y - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.y, l(0), g3.xxxx - ld_structured r38.y, r6.w, l(0), g3.xxxx - ld_structured r38.z, r9.y, l(0), g3.xxxx - ld_structured r38.w, r8.x, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - if_nz r7.z - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.z, l(0), g3.xxxx - ld_structured r38.y, r8.y, l(0), g3.xxxx - ld_structured r38.z, r9.z, l(0), g3.xxxx - ld_structured r38.w, r8.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - if_nz r7.w - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.w, l(0), g3.xxxx - ld_structured r38.y, r8.w, l(0), g3.xxxx - ld_structured r38.z, r9.w, l(0), g3.xxxx - ld_structured r38.w, r13.x, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - if_nz r4.w - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r6.x, l(0), g3.xxxx - ld_structured r38.y, r13.y, l(0), g3.xxxx - ld_structured r38.z, r14.x, l(0), g3.xxxx - ld_structured r38.w, r13.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - ld_structured r37.x, r5.z, l(0), g3.xxxx - ld_structured r37.y, r10.x, l(0), g3.xxxx - ld_structured r37.z, r10.y, l(0), g3.xxxx - ld_structured r37.w, r10.z, l(0), g3.xxxx - else - mov r37.xyzw, l(0,0,0,0) - endif - xor r28.yw, r2.zzzw, r37.xxxy - and r28.y, r28.w, r28.y - xor r37.xy, r5.xyxx, r37.zwzz - and r28.y, r28.y, r37.x - and r28.y, r37.y, r28.y - countbits r28.y, r28.y - and r28.y, r22.w, r28.y - iadd r28.x, r28.y, r28.x - endif - if_nz r7.x - store_structured g3.x, r11.x, l(0), r28.x - endif - sync_g_t - if_z vThreadIDInGroup.x - store_structured g3.x, l(4096), l(0), l(0) - store_structured g3.x, l(4609), l(0), l(0) - endif - if_nz r1.w - if_nz r16.x - ld_structured r28.y, r14.y, l(0), g3.xxxx - ld_structured r28.w, r5.w, l(0), g3.xxxx - iadd r28.y, r28.w, r28.y - store_structured g3.x, r10.w, l(0), r28.y - else - ld_structured r28.y, l(4097), l(0), g3.xxxx - store_structured g3.x, l(4610), l(0), r28.y - endif - endif - sync_g_t - if_nz r1.w - if_nz r16.y - ld_structured r28.y, r10.w, l(0), g3.xxxx - ld_structured r28.w, r11.w, l(0), g3.xxxx - iadd r28.y, r28.w, r28.y - else - ld_structured r28.y, r10.w, l(0), g3.xxxx - endif - store_structured g3.x, r15.x, l(0), r28.y - endif - sync_g_t - if_nz r1.w - if_nz r16.z - ld_structured r28.y, r14.y, l(0), g3.xxxx - ld_structured r28.w, r15.w, l(0), g3.xxxx - iadd r28.y, r28.w, r28.y - else - ld_structured r28.y, r14.y, l(0), g3.xxxx - endif - store_structured g3.x, r15.z, l(0), r28.y - endif - sync_g_t - if_nz r1.w - if_nz r16.w - ld_structured r28.y, r10.w, l(0), g3.xxxx - ld_structured r28.w, r14.z, l(0), g3.xxxx - iadd r28.y, r28.w, r28.y - else - ld_structured r28.y, r10.w, l(0), g3.xxxx - endif - store_structured g3.x, r15.x, l(0), r28.y - endif - sync_g_t - if_nz r1.w - if_nz r18.x - ld_structured r28.y, r14.y, l(0), g3.xxxx - ld_structured r28.w, r17.y, l(0), g3.xxxx - iadd r28.y, r28.w, r28.y - else - ld_structured r28.y, r14.y, l(0), g3.xxxx - endif - store_structured g3.x, r15.z, l(0), r28.y - endif - sync_g_t - if_nz r1.w - if_nz r18.y - ld_structured r28.y, r10.w, l(0), g3.xxxx - ld_structured r28.w, r14.w, l(0), g3.xxxx - iadd r28.y, r28.w, r28.y - else - ld_structured r28.y, r10.w, l(0), g3.xxxx - endif - store_structured g3.x, r15.x, l(0), r28.y - endif - sync_g_t - if_nz r1.w - if_nz r18.z - ld_structured r28.y, r14.y, l(0), g3.xxxx - ld_structured r28.w, r17.w, l(0), g3.xxxx - iadd r28.y, r28.w, r28.y - else - ld_structured r28.y, r14.y, l(0), g3.xxxx - endif - store_structured g3.x, r15.z, l(0), r28.y - endif - sync_g_t - if_nz r1.w - if_nz r18.w - ld_structured r28.y, r10.w, l(0), g3.xxxx - ld_structured r28.w, r12.w, l(0), g3.xxxx - iadd r28.y, r28.w, r28.y - else - ld_structured r28.y, r10.w, l(0), g3.xxxx - endif - store_structured g3.x, r15.x, l(0), r28.y - endif - sync_g_t - if_nz r1.w - if_nz r13.w - ld_structured r28.y, r14.y, l(0), g3.xxxx - ld_structured r28.w, r17.z, l(0), g3.xxxx - iadd r28.y, r28.w, r28.y - else - ld_structured r28.y, r14.y, l(0), g3.xxxx - endif - store_structured g3.x, r15.z, l(0), r28.y - endif - sync_g_t - mov r28.y, l(0) - mov r28.w, r26.x - loop - uge r29.w, r28.y, r21.x - breakc_nz r29.w - ult r29.w, r28.w, r23.w - iadd r30.w, r26.z, r28.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r30.w, r30.w, l(0), u2.xxxx - movc r30.w, r29.w, r30.w, l(-1) - ushr r33.w, r30.w, r26.y - and r37.xyzw, r33.wwww, l(1, 2, 4, 8) - ine r38.xyzw, r37.xyzw, l(0, 0, 0, 0) - bfi r39.xyzw, l(1, 1, 1, 1), vThreadIDInGroup.xxxx, r38.xyzw, l(0, 0, 0, 0) - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - sync_g_t - if_nz r7.x - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r3.x, l(0), g3.xxxx - ld_structured r40.y, r6.y, l(0), g3.xxxx - ld_structured r40.z, r9.x, l(0), g3.xxxx - ld_structured r40.w, r6.z, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - if_nz r7.y - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r3.y, l(0), g3.xxxx - ld_structured r40.y, r6.w, l(0), g3.xxxx - ld_structured r40.z, r9.y, l(0), g3.xxxx - ld_structured r40.w, r8.x, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - if_nz r7.z - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r3.z, l(0), g3.xxxx - ld_structured r40.y, r8.y, l(0), g3.xxxx - ld_structured r40.z, r9.z, l(0), g3.xxxx - ld_structured r40.w, r8.z, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - if_nz r7.w - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r3.w, l(0), g3.xxxx - ld_structured r40.y, r8.w, l(0), g3.xxxx - ld_structured r40.z, r9.w, l(0), g3.xxxx - ld_structured r40.w, r13.x, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - if_nz r4.w - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r6.x, l(0), g3.xxxx - ld_structured r40.y, r13.y, l(0), g3.xxxx - ld_structured r40.z, r14.x, l(0), g3.xxxx - ld_structured r40.w, r13.z, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - ld_structured r35.w, r5.z, l(0), g3.xxxx - ld_structured r37.y, r10.x, l(0), g3.xxxx - ld_structured r37.z, r10.y, l(0), g3.xxxx - ld_structured r37.w, r10.z, l(0), g3.xxxx - bfi r33.w, l(4), l(5), r33.w, l(0) - iadd r33.w, r11.y, r33.w - iadd r33.w, r33.w, l(4096) - ld_structured r33.w, r33.w, l(0), g3.xxxx - if_nz r29.w - iadd r29.w, r37.x, l(-1) - xor r29.w, r35.w, r29.w - ieq r38.xyz, r38.yzwy, l(0, 0, 0, 0) - xor r37.x, r37.y, r38.x - and r29.w, r29.w, r37.x - xor r37.x, r37.z, r38.y - and r29.w, r29.w, r37.x - xor r37.x, r37.w, r38.z - and r29.w, r29.w, r37.x - ubfe r29.w, vThreadIDInGroup.x, l(0), r29.w - countbits r29.w, r29.w - iadd r29.w, r29.w, r33.w - iadd r29.w, r26.w, r29.w - store_structured u2.x, r29.w, l(0), r30.w - endif - sync_g_t - if_nz r7.x - ld_structured r29.w, r11.z, l(0), g3.xxxx - xor r30.w, r2.z, r35.w - xor r33.w, r2.w, r37.y - and r30.w, r30.w, r33.w - xor r33.w, r5.x, r37.z - and r30.w, r30.w, r33.w - xor r33.w, r5.y, r37.w - and r30.w, r30.w, r33.w - countbits r30.w, r30.w - iadd r29.w, r29.w, r30.w - store_structured g3.x, r11.z, l(0), r29.w - endif - iadd r28.yw, r28.yyyw, l(0, 1, 0, 32) - endloop - if_nz r21.w - ult r28.y, r28.w, r23.w - iadd r29.w, r26.z, r28.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r29.w, r29.w, l(0), u2.xxxx - movc r29.w, r28.y, r29.w, l(-1) - ushr r30.w, r29.w, r26.y - if_nz r22.w - and r37.xyzw, r30.wwww, l(1, 2, 4, 8) - ine r37.xyzw, r37.xyzw, l(0, 0, 0, 0) - bfi r37.xyzw, l(1, 1, 1, 1), vThreadIDInGroup.xxxx, r37.xyzw, l(0, 0, 0, 0) - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - sync_g_t - if_nz r22.w - if_nz r7.x - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.x, l(0), g3.xxxx - ld_structured r38.y, r6.y, l(0), g3.xxxx - ld_structured r38.z, r9.x, l(0), g3.xxxx - ld_structured r38.w, r6.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - if_nz r7.y - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.y, l(0), g3.xxxx - ld_structured r38.y, r6.w, l(0), g3.xxxx - ld_structured r38.z, r9.y, l(0), g3.xxxx - ld_structured r38.w, r8.x, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - if_nz r7.z - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.z, l(0), g3.xxxx - ld_structured r38.y, r8.y, l(0), g3.xxxx - ld_structured r38.z, r9.z, l(0), g3.xxxx - ld_structured r38.w, r8.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - if_nz r7.w - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.w, l(0), g3.xxxx - ld_structured r38.y, r8.w, l(0), g3.xxxx - ld_structured r38.z, r9.w, l(0), g3.xxxx - ld_structured r38.w, r13.x, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - if_nz r4.w - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r6.x, l(0), g3.xxxx - ld_structured r38.y, r13.y, l(0), g3.xxxx - ld_structured r38.z, r14.x, l(0), g3.xxxx - ld_structured r38.w, r13.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r22.w - ld_structured r37.x, r5.z, l(0), g3.xxxx - ld_structured r37.y, r10.x, l(0), g3.xxxx - ld_structured r37.z, r10.y, l(0), g3.xxxx - ld_structured r37.w, r10.z, l(0), g3.xxxx - and r38.xyzw, r30.wwww, l(1, 2, 4, 8) - iadd r33.w, r38.x, l(-1) - xor r33.w, r37.x, r33.w - ine r38.xyz, r38.yzwy, l(0, 0, 0, 0) - ieq r38.xyz, r38.xyzx, l(0, 0, 0, 0) - xor r38.xyz, r37.yzwy, r38.xyzx - and r33.w, r33.w, r38.x - and r33.w, r38.y, r33.w - and r33.w, r38.z, r33.w - bfi r30.w, l(4), l(5), r30.w, l(0) - iadd r30.w, r11.y, r30.w - iadd r30.w, r30.w, l(4096) - ld_structured r30.w, r30.w, l(0), g3.xxxx - ubfe r33.w, vThreadIDInGroup.x, l(0), r33.w - countbits r33.w, r33.w - iadd r30.w, r30.w, r33.w - else - mov r37.xyzw, l(0,0,0,0) - mov r30.w, l(0) - endif - if_nz r28.y - iadd r28.y, r26.w, r30.w - store_structured u2.x, r28.y, l(0), r29.w - endif - sync_g_t - if_nz r22.w - if_nz r7.x - ld_structured r28.y, r11.z, l(0), g3.xxxx - xor r29.w, r2.z, r37.x - xor r30.w, r2.w, r37.y - and r29.w, r29.w, r30.w - xor r37.xy, r5.xyxx, r37.zwzz - and r29.w, r29.w, r37.x - and r29.w, r37.y, r29.w - countbits r29.w, r29.w - iadd r28.y, r28.y, r29.w - store_structured g3.x, r11.z, l(0), r28.y - endif - endif - endif - iadd r26.y, r26.y, l(4) - mov r28.y, r26.w - mov r26.w, r26.z - mov r26.z, r28.y - endloop - mov r21.x, vThreadIDInGroup.x - loop - ige r21.z, r21.x, r17.x - breakc_nz r21.z - iadd r21.z, r21.x, r21.y - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r21.w, r21.z, l(0), u2.xxxx - iadd r21.z, r21.z, l(-1) - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r21.z, r21.z, l(0), u2.xxxx - ishr r21.zw, r21.zzzw, l(0, 0, 16, 16) - iadd r22.w, r21.w, l(-1) - movc r21.z, r21.x, r21.z, r22.w - ine r22.w, r21.z, r21.w - if_nz r22.w - iadd r21.zw, r19.yyyy, r21.zzzw - store_structured u2.x, r21.w, l(0), r21.x - iadd r21.z, r21.z, l(1) - store_structured u2.x, r21.z, l(0), r21.x - endif - iadd r21.x, r21.x, l(1024) - endloop - ld_raw r21.xy, l(96), g0.xyxx - mov r26.x, vThreadIDInGroup.x - loop - ige r21.z, r26.x, r17.x - breakc_nz r21.z - iadd r21.z, r21.y, r26.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r21.z, r21.z, l(0), u2.xxxx - and r21.z, r21.z, l(0x0000ffff) - iadd r21.z, r21.z, r21.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r37.xyzw, r21.z, l(0), u1.xyzw - store_structured g3.x, r26.x, l(0), r37.x - iadd r26.xyzw, r26.xxxx, l(1024, 1975, 3950, 5925) - store_structured g3.x, r26.y, l(0), r37.y - store_structured g3.x, r26.z, l(0), r37.z - store_structured g3.x, r26.w, l(0), r37.w - endloop - sync_g_t - ld_raw r21.x, l(84), g0.xxxx - mul r21.y, r21.x, r21.x - ld_raw r21.z, l(100), g0.xxxx - ld_raw r21.w, l(112), g1.xxxx - mov r22.w, vThreadIDInGroup.x - loop - ige r23.w, r22.w, r17.x - breakc_nz r23.w - iadd r23.w, r21.z, r22.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r23.w, r23.w, l(0), u2.xxxx - and r23.w, r23.w, l(0x0000ffff) - ld_structured r26.x, r22.w, l(0), g3.xxxx - iadd r37.xyzw, r22.wwww, l(1975, 3950, 5925, 1024) - ld_structured r26.y, r37.x, l(0), g3.xxxx - ld_structured r26.z, r37.y, l(0), g3.xxxx - ld_structured r26.w, r37.z, l(0), g3.xxxx - iadd r28.y, r21.w, r23.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r37.xyz, r28.y, l(0), t14.xyzx - dp4 r28.y, r26.xyzw, icb[r20.z + 0].xyzw - mad r28.y, r28.y, r19.z, r20.x - min r28.y, r28.y, l(127.500000) - max r28.y, r28.y, l(0.000000) - ftoi r28.y, r28.y - dp4 r29.w, r26.xyzw, icb[r20.w + 0].xyzw - mad r29.w, r29.w, r19.w, r20.y - min r29.w, r29.w, l(127.500000) - max r29.w, r29.w, l(0.000000) - ftoi r29.w, r29.w - imad r28.y, r29.w, l(128), r28.y - iadd r29.w, r28.y, l(256) - add r30.w, r26.w, l(0.000000) - mov r38.xyz, l(0,0,0,0) - mov r33.w, l(0.000000) - mov r35.w, r28.y - loop - ilt r38.w, r29.w, r35.w - breakc_nz r38.w - iadd r38.w, r19.y, r35.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r39.x, r38.w, l(0), u2.xxxx - iadd r39.yzw, r38.wwww, l(0, 1, 2, 3) - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r38.w, r39.y, l(0), u2.xxxx - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r39.y, r39.z, l(0), u2.xxxx - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r39.z, r39.w, l(0), u2.xxxx - umin r39.x, r38.w, r39.x - umin r39.x, r39.y, r39.x - imax r38.w, r38.w, r39.y - imax r38.w, r39.z, r38.w - imax r38.w, r38.w, l(0) - mov r39.yzw, r38.xxyz - mov r40.x, r33.w - mov r40.y, r39.x - loop - uge r40.z, r40.y, r38.w - breakc_nz r40.z - ine r40.z, r22.w, r40.y - if_nz r40.z - ld_structured r41.x, r40.y, l(0), g3.xxxx - iadd r42.xyz, r40.yyyy, l(1975, 3950, 5925, 0) - ld_structured r41.y, r42.x, l(0), g3.xxxx - ld_structured r41.z, r42.y, l(0), g3.xxxx - ld_structured r40.z, r42.z, l(0), g3.xxxx - add r41.xyz, r26.xyzx, -r41.xyzx - dp3 r40.w, r41.xyzx, r41.xyzx - lt r41.w, r21.y, r40.w - if_nz r41.w - iadd r41.w, r40.y, l(1) - mov r40.y, r41.w - continue - endif - ld_raw r41.w, l(112), g1.xxxx - ine r42.x, r41.w, l(-1) - if_nz r42.x - ld_raw r42.x, l(100), g0.xxxx - iadd r42.x, r40.y, r42.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r42.x, r42.x, l(0), u2.xxxx - and r42.x, r42.x, l(0x0000ffff) - iadd r41.w, r41.w, r42.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r42.xyz, r41.w, l(0), t14.xyzx - add r42.xyz, r37.xyzx, -r42.xyzx - dp3 r41.w, r42.xyzx, r42.xyzx - ge r42.x, r21.y, r41.w - if_nz r42.x - iadd r42.x, r40.y, l(1) - mov r40.y, r42.x - continue - endif - add r41.w, r41.w, l(0.000000) - div r41.w, r21.y, r41.w - rsq r41.w, r41.w - add r41.w, r41.w, l(-1.000000) - min r41.w, r41.w, l(1.000000) - else - mov r41.w, l(1.000000) - endif - add r40.w, r40.w, l(0.000000) - rsq r40.w, r40.w - mad r40.w, r21.x, r40.w, l(-1.000000) - max r40.w, r40.w, l(0.000000) - mul r42.x, r40.w, r40.w - mul r41.w, r41.w, r42.x - add r40.z, r30.w, r40.z - div r40.z, r41.w, r40.z - mad r39.yzw, r40.zzzz, r41.xxyz, r39.yyzw - add r40.x, r40.w, r40.x - endif - iadd r40.y, r40.y, l(1) - endloop - mov r38.xyz, r39.yzwy - mov r33.w, r40.x - iadd r35.w, r35.w, l(128) - endloop - ld_raw r26.x, l(72), g1.xxxx - mul r26.x, r26.w, r26.x - div r26.x, r26.x, r33.w - ld_raw r26.y, l(96), g0.xxxx - iadd r23.w, r23.w, r26.y - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r37.xyz, r23.w, l(0), u1.xyzx - mad r26.xzw, r38.xxyz, r26.xxxx, r37.xxyz - store_structured u1.xyz, r23.w, l(0), r26.xzwx - mov r22.w, r37.w - endloop - sync_g_t - ld_raw r19.z, l(96), g0.xxxx - mov r20.x, vThreadIDInGroup.x - loop - ige r19.w, r20.x, r19.x - breakc_nz r19.w - iadd r19.w, r19.z, r20.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r21.xyzw, r19.w, l(0), u1.xyzw - store_structured g3.x, r20.x, l(0), r21.x - iadd r20.xyzw, r20.xxxx, l(1024, 1975, 3950, 5925) - store_structured g3.x, r20.y, l(0), r21.y - store_structured g3.x, r20.z, l(0), r21.z - store_structured g3.x, r20.w, l(0), r21.w - endloop - ld_raw r19.x, l(100), g0.xxxx - mov r19.z, vThreadIDInGroup.x - loop - ige r19.w, r19.z, r17.x - breakc_nz r19.w - iadd r19.w, r19.z, r19.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r19.w, r19.w, l(0), u2.xxxx - ushr r19.w, r19.w, l(16) - iadd r19.w, r19.w, r19.y - store_structured u2.x, r19.w, l(0), l(-1) - iadd r20.x, r19.w, l(1) - store_structured u2.x, r20.x, l(0), l(-1) - iadd r19.z, r19.z, l(1024) - endloop - endif - if_z vThreadIDInGroup.x - ld_raw r17.x, l(8), g1.xxxx - mul r17.x, r17.x, l(1000.000000) - ftou r17.x, r17.x - umax r17.x, r17.x, l(1) - ld_raw r19.x, l(104), g1.xxxx - iadd r17.x, r17.x, r19.x - store_raw g1.x, l(104), r17.x - endif - sync_g_t - ld_raw r17.x, l(104), g1.xxxx - ld_raw r19.x, l(104), g0.xxxx - uge r17.x, r17.x, r19.x - if_nz r17.x - ld_raw r17.x, l(0), g0.xxxx - mov r19.x, l(0) - mov r19.y, vThreadIDInGroup.x - loop - uge r19.z, r19.y, r17.x - breakc_nz r19.z - ld_structured r20.x, r19.y, l(0), g3.xxxx - iadd r21.xyz, r19.yyyy, l(1975, 3950, 1024, 0) - ld_structured r20.y, r21.x, l(0), g3.xxxx - ld_structured r20.z, r21.y, l(0), g3.xxxx - iadd r19.z, r0.x, r19.y - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r21.xyw, r19.z, l(0), u0.xyxz - add r20.xyz, r20.xyzx, -r21.xywx - max r19.z, |r20.y|, |r20.x| - max r19.z, |r20.z|, r19.z - max r19.x, r19.x, r19.z - mov r19.y, r21.z - endloop - if_z vThreadIDInGroup.x - ld_raw r17.x, l(100), g1.xxxx - iadd r17.x, r17.x, l(1) - store_raw g1.x, l(100), r17.x - ld_raw r17.x, l(104), g0.xxxx - ld_raw r19.y, l(104), g1.xxxx - iadd r17.x, -r17.x, r19.y - store_raw g1.x, l(104), r17.x - endif - ld_raw r17.x, l(112), g0.xxxx - ld_raw r19.y, l(8), g1.xxxx - mul r17.x, r17.x, r19.y - lt r17.x, r17.x, r19.x - if_nz r17.x - store_raw g1.x, l(100), l(0) - endif - endif - iadd r15.y, r15.y, l(1) - endloop - sync_g_t - ld_raw r0.yz, l(0), g0.xxyx - mov r1.x, vThreadIDInGroup.x - loop - uge r0.w, r1.x, r0.y - breakc_nz r0.w - iadd r0.w, r0.z, r1.x - ld_structured r2.x, r1.x, l(0), g3.xxxx - iadd r1.xyzw, r1.xxxx, l(1024, 1975, 3950, 5925) - ld_structured r2.y, r1.y, l(0), g3.xxxx - ld_structured r2.z, r1.z, l(0), g3.xxxx - ld_structured r2.w, r1.w, l(0), g3.xxxx - store_structured u0.xyzw, r0.w, l(0), r2.xyzw - endloop -else - ld_raw r0.y, l(4), g0.xxxx - not r0.z, vThreadIDInGroup.x - and r0.z, r0.z, l(3) - ult r1.xyzw, vThreadIDInGroup.xxxx, l(192, 176, 3, 512) - and r2.xyzw, vThreadIDInGroup.xxxx, l(32, 31, 1, 2) - movc r0.w, r2.x, l(-1.000000), l(1.000000) - iadd r3.xyzw, vThreadIDInGroup.xxxx, l(16, 8, 4, 2) - ieq r2.x, r2.y, l(0) - and r2.x, r1.x, r2.x - ushr r4.xy, vThreadIDInGroup.xxxx, l(6, 5, 0, 0) - ishl r4.z, r4.y, l(2) - ishl r4.w, vThreadIDInGroup.x, l(3) - iadd r4.zw, r4.zzzw, l(0, 0, 76, 76) - iadd r2.z, r2.z, l(-1) - ine r2.w, r2.w, l(0) - ieq r2.w, r2.w, l(0) - and r5.xyz, vThreadIDInGroup.xxxx, l(4, 8, 992, 0) - ine r5.xy, r5.xyxx, l(0, 0, 0, 0) - ieq r5.xy, r5.xyxx, l(0, 0, 0, 0) - iadd r6.xyzw, vThreadIDInGroup.xxxx, l(1, 1040, 3088, 1032) - ult r7.xyzw, r2.yyyy, l(16, 8, 4, 2) - ult r5.w, r2.y, l(1) - iadd r8.xyzw, vThreadIDInGroup.xxxx, l(3080, 1028, 3076, 1026) - iadd r9.xyzw, r3.xyzw, l(2048, 2048, 2048, 2048) - iadd r10.xyz, r5.zzzz, l(1024, 2048, 3072, 0) - iadd r11.xy, r4.yyyy, l(1, 513, 0, 0) - bfi r12.xyzw, l(10, 11, 10, 5), l(0, 0, 0, 5), vThreadIDInGroup.xxxx, l(1024, 2048, 3072, 0) - iadd r11.xz, r11.xxyx, r12.wwww - iadd r13.xyzw, vThreadIDInGroup.xxxx, l(3074, 1025, 3073, 514) - iadd r14.xy, r6.xxxx, l(2048, 4096, 0, 0) - iadd r10.w, vThreadIDInGroup.x, l(4096) - iadd r11.w, r13.w, l(4096) - iadd r15.xyzw, vThreadIDInGroup.xxxx, l(4097, 512, 4610, 4093) - iadd r12.w, r15.y, l(4096) - uge r16.xyzw, vThreadIDInGroup.xxxx, l(1, 2, 4, 8) - iadd r17.xyzw, vThreadIDInGroup.xxxx, l(506, 4081, 482, 4033) - iadd r14.zw, r17.xxxz, l(0, 0, 4096, 4096) - uge r18.xyzw, vThreadIDInGroup.xxxx, l(16, 32, 64, 128) - iadd r17.xz, vThreadIDInGroup.xxxx, l(386, 0, 3841, 0) - iadd r13.w, r17.x, l(4096) - uge r15.y, vThreadIDInGroup.x, l(256) - iadd r11.xz, r11.xxzx, l(4096, 0, 4096, 0) - mov r17.x, l(0) - loop - ld_raw r19.x, l(16), g1.xxxx - uge r19.y, r17.x, r19.x - breakc_nz r19.y - utof r19.y, r17.x - add r19.z, r19.y, l(1.000000) - utof r19.x, r19.x - div r19.x, r19.z, r19.x - if_z vThreadIDInGroup.x - ld_raw r19.z, l(12), g1.xxxx - iadd r19.z, r17.x, r19.z - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r20.xyzw, r19.z, l(0), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r21.xyzw, r19.z, l(16), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r22.xyzw, r19.z, l(32), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r23.xyzw, r19.z, l(48), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r24.xyzw, r19.z, l(64), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r25.xyzw, r19.z, l(80), t2.xyzw - ld_structured_indexable(structured_buffer, stride=100)(mixed,mixed,mixed,mixed) r19.z, r19.z, l(96), t2.xxxx - store_raw g2.xyzw, l(0), r20.xyzw - store_raw g2.xyzw, l(16), r21.xyzw - store_raw g2.xyzw, l(32), r22.xyzw - store_raw g2.xyzw, l(48), r23.xyzw - store_raw g2.xyzw, l(64), r24.xyzw - store_raw g2.xyzw, l(80), r25.xyzw - store_raw g2.x, l(96), r19.z - endif - sync_g_t - ld_raw r19.z, l(0), g0.xxxx - ld_raw r20.xyz, l(12), g2.xyzx - ld_raw r21.xyzw, l(60), g2.xyzw - ld_raw r22.xyzw, l(24), g2.xyzw - ld_raw r23.xyzw, l(76), g2.xyzw - ld_raw r24.xyzw, l(40), g2.xyzw - ld_raw r25.xy, l(92), g2.xyxx - ld_raw r19.w, l(56), g2.xxxx - ld_raw r26.xyzw, l(12), g2.xyzw - ld_raw r20.w, l(36), g2.xxxx - ld_raw r25.z, l(48), g2.xxxx - mov r25.w, vThreadIDInGroup.x - loop - uge r27.x, r25.w, r19.z - breakc_nz r27.x - iadd r27.x, r0.y, r25.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r28.xyzw, r27.x, l(0), u0.xyzw - iadd r27.y, r0.x, r25.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r29.xyzw, r27.y, l(0), u0.xyzw - eq r27.z, r28.w, l(0.000000) - movc r28.w, r27.z, r29.w, r28.w - lt r27.z, l(0.000000), r28.w - if_nz r27.z - if_nz r25.y - add r30.xyz, r20.xyzx, r28.xyzx - mad r27.zw, r28.xxxx, r21.xxxw, r30.xxxy - mad r27.zw, r29.xxxx, r22.xxxw, r27.zzzw - mad r27.z, r28.y, r21.y, r27.z - mad r27.z, r29.y, r22.y, r27.z - mad r27.z, r28.z, r21.z, r27.z - mad r30.x, r29.z, r22.z, r27.z - mad r27.z, r28.y, r23.x, r27.w - mad r27.z, r29.y, r24.x, r27.z - mad r27.z, r28.z, r23.y, r27.z - mad r30.y, r29.z, r24.y, r27.z - mad r27.z, r28.x, r23.z, r30.z - mad r27.z, r29.x, r24.z, r27.z - mad r27.z, r28.y, r23.w, r27.z - mad r27.z, r29.y, r24.w, r27.z - mad r27.z, r28.z, r25.x, r27.z - mad r27.z, r29.z, r19.w, r27.z - else - add r31.xyz, r28.xyzx, -r29.xyzx - mad r27.w, r31.x, r26.w, r26.x - add r30.x, r27.w, r28.x - mad r27.w, r31.y, r20.w, r26.y - add r30.y, r27.w, r28.y - mad r27.w, r31.z, r25.z, r26.z - add r27.z, r27.w, r28.z - endif - ld_raw r31.xyz, l(0), g2.xyzx - add r29.xyz, r28.xyzx, r31.xyzx - mov r28.xy, r30.xyxx - mov r28.z, r27.z - else - mov r29.xyz, r28.xyzx - endif - store_structured u0.xyzw, r27.x, l(0), r28.xyzw - store_structured u0.xyzw, r27.y, l(0), r29.xyzw - iadd r25.w, r25.w, l(1024) - endloop - ld_raw r19.z, l(44), g1.xxxx - sync_g_t - ld_raw r19.w, l(8), g1.xxxx - mul r19.w, r19.w, r19.w - movc r19.w, r0.z, r19.w, l(0) - ld_raw r20.x, l(0), g0.xxxx - ishl r20.y, r20.x, l(2) - mov r20.z, vThreadIDInGroup.x - loop - uge r20.w, r20.z, r20.y - breakc_nz r20.w - ushr r20.w, r20.z, l(2) - iadd r20.w, r0.y, r20.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r21.xyzw, r20.w, l(0), u0.xyzw - lt r22.x, l(0.000000), r21.w - if_nz r22.x - iadd r22.x, r19.z, r20.z - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r22.xyzw, r22.x, l(0), t13.xyzw - mad r21.xyzw, r22.xyzw, r19.wwww, r21.xyzw - store_structured u0.xyzw, r20.w, l(0), r21.xyzw - endif - iadd r20.z, r20.z, l(1024) - endloop - sync_g_t - ld_raw r19.z, l(28), g1.xxxx - ine r19.z, r19.z, l(-1) - if_nz r19.z - ld_raw r19.zw, l(36), g0.xxxy - ld_raw r20.xyz, l(24), g1.xyzx - ld_raw r20.w, l(0), g0.xxxx - mov r21.x, vThreadIDInGroup.x - loop - uge r21.y, r21.x, r20.w - breakc_nz r21.y - iadd r21.yz, r20.yyzy, r21.xxxx - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r22.xyzw, r21.y, l(0), t11.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r23.xyzw, r21.z, l(0), t11.xyzw - add r23.xyzw, -r22.xyzw, r23.xyzw - mad r22.xyzw, r23.xyzw, r19.xxxx, r22.xyzw - iadd r21.y, r0.y, r21.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r23.xyzw, r21.y, l(0), u0.xyzw - add r22.xyz, r22.xyzx, -r23.xyzx - dp3 r21.z, r22.xyzx, r22.xyzx - add r21.z, r21.z, l(0.000000) - mad r21.w, r22.w, -r19.z, -r19.w - min r21.w, r21.w, l(0.000000) - rsq r21.z, r21.z - mad r21.z, r21.w, r21.z, l(1.000000) - max r21.z, r21.z, l(0.000000) - mul r21.z, r20.x, r21.z - mad r22.xyz, r21.zzzz, r22.xyzx, r23.xyzx - ge r21.z, r21.w, l(0.000000) - movc r22.w, r21.z, l(0), r23.w - store_structured u0.xyzw, r21.y, l(0), r22.xyzw - iadd r21.x, r21.x, l(1024) - endloop - endif - ld_raw r19.z, l(20), g1.xxxx - eq r19.w, r19.z, l(0.000000) - ld_raw r20.x, l(24), g0.xxxx - ieq r20.y, r20.x, l(0) - or r19.w, r19.w, r20.y - if_z r19.w - ld_raw r19.w, l(0), g0.xxxx - utof r20.y, r19.w - mul r19.z, r19.z, r20.y - utof r20.y, r20.x - div r19.z, r19.z, r20.y - ld_raw r20.yz, l(28), g0.xxyx - mov r20.w, vThreadIDInGroup.x - loop - uge r21.x, r20.w, r19.w - breakc_nz r21.x - iadd r21.x, r0.y, r20.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r22.xyzw, r21.x, l(0), u0.xyzw - mov r21.yzw, l(0,0,0,0) - mov r23.x, r20.w - loop - uge r23.y, r23.x, r20.x - breakc_nz r23.y - iadd r23.y, r20.y, r23.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r23.y, r23.y, l(0), t5.xxxx - and r23.z, r23.y, l(0x0000ffff) - iadd r23.z, r0.y, r23.z - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r24.xyz, r23.z, l(0), u0.xyzx - add r24.xyz, -r22.xyzx, r24.xyzx - mad r23.z, r24.x, r24.x, l(0.000000) - mad r23.z, r24.y, r24.y, r23.z - mad r23.z, r24.z, r24.z, r23.z - ushr r23.y, r23.y, l(16) - utof r23.y, r23.y - mul r23.y, r20.z, r23.y - rsq r23.z, r23.z - mad r23.y, -r23.y, r23.z, l(1.000000) - lt r23.z, l(0.000000), r23.y - mad r24.xyz, r24.xyzx, r23.yyyy, r21.yzwy - movc r21.yzw, r23.zzzz, r24.xxyz, r21.yyzw - iadd r23.x, r19.w, r23.x - endloop - mad r22.xyz, r21.yzwy, r19.zzzz, r22.xyzx - store_structured u0.xyzw, r21.x, l(0), r22.xyzw - iadd r20.w, r20.w, l(1024) - endloop - endif - mov r19.z, l(0) - loop - ld_raw r19.w, l(8), g0.xxxx - uge r19.w, r19.z, r19.w - breakc_nz r19.w - ld_raw r20.xyz, l(12), g0.xyzx - iadd r19.w, r19.z, r20.x - ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r22.xyzw, r19.w, l(0), t3.xyzw - ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r20.xw, r19.w, l(16), t3.xxxy - ld_raw r19.w, l(108), g1.xxxx - mul r22.xy, r19.wwww, r22.xyxx - exp r22.xy, r22.xyxx - add r22.xy, -r22.xyxx, l(1.000000, 1.000000, 0.000000, 0.000000) - iadd r20.y, r20.x, r20.y - ine r20.z, r20.z, l(-1) - ld_raw r21.x, l(20), g0.xxxx - iadd r20.x, r20.x, r21.x - sync_g_t - mov r21.x, vThreadIDInGroup.x - loop - uge r23.x, r21.x, r20.w - breakc_nz r23.x - iadd r23.x, r20.y, r21.x - ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r23.xy, r23.x, l(0), t4.xyxx - and r23.z, r23.y, l(0x0000ffff) - ushr r23.y, r23.y, l(16) - iadd r23.yz, r0.yyyy, r23.yyzy - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r24.xyzw, r23.z, l(0), u0.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r25.xyzw, r23.y, l(0), u0.xyzw - add r26.xyz, -r24.xyzx, r25.xyzx - mad r23.w, r26.x, r26.x, l(0.000000) - mad r23.w, r26.y, r26.y, r23.w - mad r23.w, r26.z, r26.z, r23.w - lt r26.w, l(0.000000), r23.x - rsq r23.w, r23.w - mad r23.x, r23.x, r23.w, l(-1.000000) - and r23.x, r23.x, r26.w - min r23.w, r22.w, -r23.x - max r23.w, r22.z, r23.w - mad r23.x, r22.y, r23.w, r23.x - iadd r23.w, r20.x, r21.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r23.w, r23.w, l(0), t16.xxxx - mul r23.w, r19.w, r23.w - exp r23.w, r23.w - add r23.w, -r23.w, l(1.000000) - movc r23.w, r20.z, r23.w, r22.x - mul r23.x, r23.w, r23.x - add r23.w, r24.w, r25.w - add r23.w, r23.w, l(0.000000) - div r23.x, r23.x, r23.w - mul r23.w, r23.x, -r24.w - mad r24.xyz, r23.wwww, r26.xyzx, r24.xyzx - store_structured u0.xyz, r23.z, l(0), r24.xyzx - mul r23.x, r23.x, r25.w - mad r23.xzw, r23.xxxx, r26.xxyz, r25.xxyz - store_structured u0.xyz, r23.y, l(0), r23.xzwx - iadd r21.x, r21.x, l(1024) - endloop - iadd r19.z, r19.z, l(1) - endloop - sync_g_t - ld_raw r19.z, l(36), g1.xxxx - ine r19.z, r19.z, l(-1) - if_nz r19.z - ld_raw r19.z, l(0), g0.xxxx - ld_raw r20.xy, l(36), g1.xyxx - mov r19.w, vThreadIDInGroup.x - loop - uge r20.z, r19.w, r19.z - breakc_nz r20.z - iadd r20.zw, r20.xxxy, r19.wwww - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r22.xyzw, r20.z, l(0), t12.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r23.xyzw, r20.w, l(0), t12.xyzw - add r23.xyzw, -r22.xyzw, r23.xyzw - mad r22.xyzw, r23.xyzw, r19.xxxx, r22.xyzw - iadd r20.z, r0.y, r19.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r23.xyz, r20.z, l(0), u0.xyzx - add r22.xyz, r22.xyzx, -r23.xyzx - dp3 r20.w, r22.xyzx, r22.xyzx - add r20.w, r20.w, l(0.000000) - rsq r20.w, r20.w - mad r20.w, -r22.w, r20.w, l(1.000000) - min r20.w, r20.w, l(0.000000) - mad r22.xyz, r20.wwww, r22.xyzx, r23.xyzx - store_structured u0.xyz, r20.z, l(0), r22.xyzx - iadd r19.w, r19.w, l(1024) - endloop - sync_g_t - endif - if_nz r1.x - ld_raw r19.z, l(0), g0.xxxx - iadd r19.w, r19.z, l(-1) - umin r19.w, r2.y, r19.w - iadd r20.x, r0.y, r19.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r20.xyzw, r20.x, l(0), u0.xyzw - dp4 r20.x, r20.xyzw, icb[r4.x + 0].xyzw - mul r20.x, r0.w, r20.x - store_structured g4.x, vThreadIDInGroup.x, l(0), r20.x - mov r20.x, r19.w - loop - iadd r20.x, r20.x, l(32) - uge r20.y, r20.x, r19.z - breakc_nz r20.y - ld_structured r20.y, vThreadIDInGroup.x, l(0), g4.xxxx - iadd r20.z, r0.y, r20.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r22.xyzw, r20.z, l(0), u0.xyzw - dp4 r20.z, r22.xyzw, icb[r4.x + 0].xyzw - mul r20.z, r0.w, r20.z - max r20.y, r20.z, r20.y - store_structured g4.x, vThreadIDInGroup.x, l(0), r20.y - endloop - endif - sync_g_t - if_nz r1.y - ld_structured r19.z, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.w, r3.x, l(0), g4.xxxx - max r19.z, r19.w, r19.z - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.z - endif - sync_g_t - if_nz r1.y - ld_structured r19.z, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.w, r3.y, l(0), g4.xxxx - max r19.z, r19.w, r19.z - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.z - endif - sync_g_t - if_nz r1.y - ld_structured r19.z, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.w, r3.z, l(0), g4.xxxx - max r19.z, r19.w, r19.z - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.z - endif - sync_g_t - if_nz r1.y - ld_structured r19.z, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.w, r3.w, l(0), g4.xxxx - max r19.z, r19.w, r19.z - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.z - endif - sync_g_t - if_nz r1.y - ld_structured r19.z, vThreadIDInGroup.x, l(0), g4.xxxx - ld_structured r19.w, r6.x, l(0), g4.xxxx - max r19.z, r19.w, r19.z - store_structured g4.x, vThreadIDInGroup.x, l(0), r19.z - endif - sync_g_t - if_nz r2.x - ld_structured r19.z, vThreadIDInGroup.x, l(0), g4.xxxx - store_raw g1.x, r4.z, r19.z - endif - sync_g_t - ld_raw r19.z, l(16), g1.xxxx - utof r19.z, r19.z - div r19.y, r19.y, r19.z - ld_raw r19.z, l(60), g0.xxxx - if_nz r19.z - ld_raw r19.w, l(80), g0.xxxx - lt r19.w, l(0.000000), r19.w - ld_raw r20.x, l(0), g0.xxxx - ld_raw r20.y, l(64), g0.xxxx - ld_raw r20.zw, l(56), g1.xxxy - mov r21.x, vThreadIDInGroup.x - loop - uge r22.x, r21.x, r20.x - breakc_nz r22.x - iadd r22.x, r0.y, r21.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r23.xyzw, r22.x, l(0), u0.xyzw - mov r24.xyzw, l(0,0,0,0) - mov r22.y, l(0) - loop - uge r22.z, r22.y, r19.z - breakc_nz r22.z - iadd r22.z, r20.y, r22.y - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r22.z, r22.z, l(0), t8.xxxx - firstbit_lo r22.w, r22.z - iadd r25.xy, r20.zwzz, r22.wwww - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r26.xyzw, r25.x, l(0), t9.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r25.xyzw, r25.y, l(0), t9.xyzw - add r25.xyzw, -r26.xyzw, r25.xyzw - mad r25.xyzw, r19.xxxx, r25.xyzw, r26.xyzw - dp3 r22.w, r23.xyzx, r25.xyzx - add r22.w, r25.w, r22.w - mov r26.xyz, r25.xyzx - mov r25.w, r22.z - mov r26.w, r22.w - loop - lt r27.x, r26.w, l(0.000000) - iadd r27.y, r25.w, l(-1) - and r25.w, r25.w, r27.y - ine r27.y, r25.w, l(0) - and r27.x, r27.y, r27.x - breakc_z r27.x - firstbit_lo r27.x, r25.w - iadd r27.xy, r20.zwzz, r27.xxxx - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r28.xyzw, r27.x, l(0), t9.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r27.xyzw, r27.y, l(0), t9.xyzw - add r27.xyzw, -r28.xyzw, r27.xyzw - mad r27.xyzw, r19.xxxx, r27.xyzw, r28.xyzw - dp3 r28.x, r23.xyzx, r27.xyzx - add r27.w, r27.w, r28.x - lt r28.x, r26.w, r27.w - movc r26.xyzw, r28.xxxx, r27.xyzw, r26.xyzw - endloop - lt r22.z, r26.w, l(0.000000) - mad r25.xyz, -r26.xyzx, r26.wwww, r24.xyzx - iadd r25.w, r24.w, l(1) - movc r24.xyzw, r22.zzzz, r25.xyzw, r24.xyzw - iadd r22.y, r22.y, l(1) - endloop - if_nz r24.w - utof r22.y, r24.w - div r22.y, l(1.000000, 1.000000, 1.000000, 1.000000), r22.y - if_nz r19.w - iadd r22.z, r0.x, r21.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r25.xyz, r22.z, l(0), u0.xyzx - ld_raw r22.w, l(80), g0.xxxx - dp3 r25.w, r24.xyzx, r24.xyzx - add r27.x, r25.w, l(0.000000) - rsq r27.x, r27.x - mul r27.yzw, r24.xxyz, r27.xxxx - add r28.xyz, r23.xyzx, -r25.xyzx - dp3 r28.w, r28.xyzx, r27.yzwy - mad r27.yzw, -r28.wwww, r27.yyzw, r28.xxyz - dp3 r28.x, r27.yzwy, r27.yzwy - add r28.x, r28.x, l(0.000000) - rsq r28.x, r28.x - mul r22.w, -r22.w, r25.w - mul r22.w, r27.x, r22.w - mul r22.w, r22.y, r22.w - mul r22.w, r28.x, r22.w - max r22.w, r22.w, l(-1.000000) - mad r25.xyz, -r27.yzwy, r22.wwww, r25.xyzx - store_structured u0.xyz, r22.z, l(0), r25.xyzx - endif - mad r23.xyz, r24.xyzx, r22.yyyy, r23.xyzx - store_structured u0.xyzw, r22.x, l(0), r23.xyzw - endif - iadd r21.x, r21.x, l(1024) - endloop - endif - ftoi r19.z, r19.x - iadd r19.z, r0.y, r19.z - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r20.xyz, r19.z, l(0), u0.xyzx - ld_raw r19.w, l(68), g0.xxxx - ld_raw r20.w, l(64), g1.xxxx - mov r22.xyz, l(0,0,0,0) - mov r23.xy, l(0,340282346638528860000000000000000000000.000000,0,0) - mov r21.x, l(0) - loop - uge r22.w, r21.x, r19.w - breakc_nz r22.w - imad r22.w, l(3), r21.x, r20.w - ld_structured_indexable(structured_buffer, stride=12)(mixed,mixed,mixed,mixed) r25.xyz, r22.w, l(0), t10.xyzx - iadd r23.zw, r22.wwww, l(0, 0, 1, 2) - ld_structured_indexable(structured_buffer, stride=12)(mixed,mixed,mixed,mixed) r27.xyz, r23.z, l(0), t10.xyzx - ld_structured_indexable(structured_buffer, stride=12)(mixed,mixed,mixed,mixed) r28.xyz, r23.w, l(0), t10.xyzx - add r27.xyz, -r25.xyzx, r27.xyzx - add r28.xyz, -r25.xyzx, r28.xyzx - mul r29.xyz, r27.zxyz, r28.yzxy - mad r29.xyz, r27.yzxy, r28.zxyz, -r29.xyzx - dp3 r22.w, r29.xyzx, r29.xyzx - rsq r22.w, r22.w - mul r29.xyz, r22.wwww, r29.xyzx - dp3 r22.w, r27.xyzx, r28.xyzx - dp3 r23.z, r27.xyzx, r27.xyzx - dp3 r23.w, r28.xyzx, r28.xyzx - mul r25.w, r22.w, r22.w - mad r25.w, r23.z, r23.w, -r25.w - div r25.w, l(1.000000, 1.000000, 1.000000, 1.000000), r25.w - add r27.w, r23.w, r23.z - mad r27.w, r22.w, l(-2.000000), r27.w - div r27.w, l(1.000000, 1.000000, 1.000000, 1.000000), r27.w - div r28.w, l(1.000000, 1.000000, 1.000000, 1.000000), r23.z - div r29.w, l(1.000000, 1.000000, 1.000000, 1.000000), r23.w - add r25.xyz, r20.xyzx, -r25.xyzx - dp3 r30.x, r25.xyzx, r27.xyzx - dp3 r30.y, r25.xyzx, r28.xyzx - dp3 r31.x, r25.xyzx, r29.xyzx - mul r30.zw, r22.wwww, r30.yyyx - mad r30.z, r23.w, r30.x, -r30.z - mad r23.z, r23.z, r30.y, -r30.w - lt r30.w, l(0.000000), r23.z - mul r30.z, r25.w, r30.z - mul r28.w, r28.w, r30.x - movc r28.w, r30.w, r30.z, r28.w - lt r30.z, l(0.000000), r28.w - mul r23.z, r25.w, r23.z - mul r25.w, r29.w, r30.y - movc r23.z, r30.z, r23.z, r25.w - add r25.w, r23.z, r28.w - lt r25.w, l(1.000000), r25.w - add r22.w, -r22.w, r23.w - add r22.w, r30.x, r22.w - add r22.w, -r30.y, r22.w - mul r22.w, r27.w, r22.w - movc_sat r22.w, r25.w, r22.w, r28.w - add r23.w, -r22.w, l(1.000000) - min r23.z, r23.z, r23.w - max r23.z, r23.z, l(0.000000) - mul r28.xyz, r23.zzzz, r28.xyzx - mad r27.xyz, r27.xyzx, r22.wwww, r28.xyzx - add r25.xyz, r25.xyzx, -r27.xyzx - dp3 r22.w, r25.xyzx, r25.xyzx - lt r23.z, r31.x, l(0.000000) - mul r23.w, r22.w, l(1.000100) - movc r31.y, r23.z, r23.w, r22.w - lt r22.w, r31.y, r23.y - movc r22.xyz, r22.wwww, r29.xyzx, r22.xyzx - movc r23.xy, r22.wwww, r31.xyxx, r23.xyxx - iadd r21.x, r21.x, l(1) - endloop - lt r19.w, r23.x, l(0.000000) - if_nz r19.w - mad r20.xyz, -r22.xyzx, r23.xxxx, r20.xyzx - store_structured u0.xyz, r19.z, l(0), r20.xyzx - endif - ld_raw r19.z, l(72), g0.xxxx - if_nz r19.z - ld_raw r19.z, l(80), g0.xxxx - lt r19.w, l(0.000000), r19.z - ld_raw r20.x, l(0), g0.xxxx - ld_raw r20.yz, l(48), g1.xxyx - ld_raw r23.yz, l(44), g0.xxyx - mov r20.w, vThreadIDInGroup.x - loop - uge r21.x, r20.w, r20.x - breakc_nz r21.x - iadd r21.x, r0.y, r20.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r25.xyzw, r21.x, l(0), u0.xyzw - iadd r22.w, r0.x, r20.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r27.xyz, r22.w, l(0), u0.xyzx - mov r28.xyz, r25.xyzx - mov r29.xyz, l(0,0,0,0) - mov r30.xyzw, l(0,0,0,0) - mov r23.w, l(0) - loop - uge r27.w, r23.w, r23.y - breakc_nz r27.w - iadd r27.w, r23.w, r23.z - ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r31.xy, r27.w, l(0), t6.xyxx - iadd r31.xyzw, r20.yzyz, r31.xxyy - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r32.xyzw, r31.x, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r33.xyzw, r31.y, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r34.xyzw, r31.z, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r31.xyzw, r31.w, l(0), t7.xyzw - add r35.xyzw, -r32.xyzw, r33.xyzw - mad r36.xyzw, r19.yyyy, r35.xyzw, r32.xyzw - add r37.xyzw, -r34.xyzw, r31.xyzw - mad r38.xyzw, r19.yyyy, r37.xyzw, r34.xyzw - max r36.w, r36.w, l(0.000000) - max r38.w, r38.w, l(0.000000) - add r39.xyzw, -r36.xyzw, r38.xyzw - mul r39.xyzw, r39.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) - dp3 r27.w, r39.xyzx, r39.xyzx - ge r28.w, l(0.000000), r27.w - if_nz r28.w - iadd r28.w, r23.w, l(1) - mov r23.w, r28.w - continue - endif - mad r35.xyzw, r19.xxxx, r35.xyzw, r32.xyzw - mad r37.xyzw, r19.xxxx, r37.xyzw, r34.xyzw - max r35.w, r35.w, l(0.000000) - max r37.w, r37.w, l(0.000000) - add r40.xyzw, -r35.xyzw, r37.xyzw - mul r41.xyzw, r40.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) - dp3 r28.w, r41.xyzx, r41.xyzx - mad r29.w, -r41.w, r41.w, r28.w - ge r31.w, l(0.000000), r29.w - if_nz r31.w - iadd r31.w, r23.w, l(1) - mov r23.w, r31.w - continue - endif - add r40.xyz, r36.zxyz, r38.zxyz - mad r40.xyz, -r40.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r27.zxyz - mad r31.w, -r39.w, r39.w, r27.w - rsq r27.w, r27.w - rsq r31.w, r31.w - mul r39.xyz, r27.wwww, r39.xyzx - mul r27.w, r31.w, r39.w - mul r42.xyz, r39.yzxy, r40.xyzx - mad r40.xyz, r40.zxyz, r39.zxyz, -r42.xyzx - dp3 r31.w, r27.xyzx, r39.xyzx - add r39.xyz, r35.xyzx, r37.xyzx - mad r42.xyz, -r39.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r28.xyzx - rsq r32.w, r28.w - rsq r29.w, r29.w - mul r28.w, r28.w, r32.w - mad r33.w, r40.w, l(0.500000), r35.w - mul r33.w, r29.w, r33.w - mul r33.w, r28.w, r33.w - mul r43.xyz, r32.wwww, r41.xyzx - mul r44.xyz, r42.zxyz, r43.yzxy - mad r44.xyz, r42.yzxy, r43.zxyz, -r44.xyzx - dp3 r34.w, r28.xyzx, r43.xyzx - dp3 r35.w, r44.xyzx, r44.xyzx - add r45.x, r35.w, l(0.000000) - mad r31.w, r31.w, r27.w, r33.w - max r31.w, r31.w, l(0.000000) - mul r29.w, r29.w, r41.w - mad r34.w, r34.w, r29.w, r33.w - max r45.y, r34.w, l(0.000000) - dp3 r34.w, r40.xyzx, r40.xyzx - mad r34.w, -r40.x, r40.x, r34.w - mad r34.w, -r31.w, r31.w, r34.w - dp3 r35.w, r40.xyzx, r44.xyzx - mad r35.w, -r31.w, r45.y, r35.w - mad r36.w, -r45.y, r45.y, r45.x - mul r37.w, r34.w, r36.w - mad r37.w, r35.w, r35.w, -r37.w - sqrt r38.w, r37.w - add r34.w, -r34.w, r35.w - add r35.w, r35.w, -r36.w - add r35.w, r34.w, r35.w - add r36.w, r38.w, r34.w - min r36.w, r36.w, l(0.000000) - div r36.w, r36.w, r35.w - lt r39.w, r36.w, l(1.000000) - lt r40.x, r34.w, r38.w - and r39.w, r39.w, r40.x - mul r34.w, r34.w, r35.w - add r40.x, -r31.w, r45.y - mad r31.w, r34.w, r40.x, r31.w - mul r31.w, r31.w, r31.w - mul r31.w, r35.w, r31.w - mul r31.w, r31.w, l(-0.360000) - lt r31.w, r31.w, r37.w - and r31.w, r31.w, r39.w - lt r34.w, r35.w, l(-0.000000) - and r31.w, r31.w, r34.w - add r40.xyz, r27.xyzx, -r28.xyzx - mad r44.xyz, -r40.xyzx, r36.wwww, r27.xyzx - mul r46.xyz, r28.wwww, r41.xyzx - add r36.xyz, -r36.xyzx, r38.xyzx - mul r36.xyz, r36.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000) - dp3 r34.w, r36.xyzx, r36.xyzx - rsq r37.w, r34.w - mul r34.w, r34.w, r37.w - mad r36.xyz, -r36.xyzx, r34.wwww, r46.xyzx - add r34.w, -r36.w, l(1.000000) - mad r38.xyz, -r36.xyzx, r34.wwww, r46.xyzx - mul r36.w, r29.w, r36.w - mad r27.w, r27.w, r34.w, r36.w - dp3 r36.w, r38.xyzx, r38.xyzx - rsq r36.w, r36.w - dp3 r37.w, r44.xyzx, r38.xyzx - mul r37.w, r36.w, r37.w - dp3 r38.x, r44.xyzx, r44.xyzx - mad r38.x, -r37.w, r37.w, r38.x - lt r38.y, l(0.000000), r38.x - rsq r38.z, r38.x - and r38.y, r38.z, r38.y - mul r27.w, r27.w, r38.x - mad r27.w, r27.w, r38.y, r37.w - mul r27.w, r36.w, r27.w - lt r36.w, |r27.w|, l(1.000000) - mad r36.xyz, r36.xyzx, r27.wwww, r40.xyzx - mul r27.w, r34.w, r35.w - div r27.w, r38.w, r27.w - add r27.w, -r27.w, l(1.000000) - div r27.w, r34.w, r27.w - mad r36.xyz, r36.xyzx, r27.wwww, r42.xyzx - mad r38.xyz, r39.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r36.xyzx - movc r38.xyz, r36.wwww, r38.xyzx, r28.xyzx - movc r38.xyz, r31.wwww, r38.xyzx, r28.xyzx - mad r39.xyz, -r39.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r38.xyzx - dp3 r27.w, r39.xyzx, r43.xyzx - mad r34.w, r27.w, r29.w, r33.w - max r34.w, r34.w, l(0.000000) - dp3 r35.w, r39.xyzx, r39.xyzx - mad r35.w, -r27.w, r27.w, r35.w - mul r37.w, r34.w, r34.w - lt r37.w, r37.w, r35.w - if_nz r37.w - iadd r37.w, r23.w, l(1) - mov r28.xyz, r38.xyzx - mov r23.w, r37.w - continue - endif - mul r32.w, r32.w, r41.w - mad r32.w, -r32.w, r32.w, l(1.000000) - max r35.w, r35.w, l(0.000000) - rsq r37.w, r35.w - mul r35.w, r29.w, r35.w - mad r35.w, r35.w, r37.w, r27.w - lt r28.w, |r35.w|, r28.w - mad r39.xyz, -r35.wwww, r41.xyzx, r39.xyzx - mul r34.w, r34.w, r37.w - mad r32.w, r34.w, r32.w, -r32.w - mad r39.xyz, r39.xyzx, r32.wwww, r29.xyzx - add r33.xyz, -r32.xyzx, r33.xyzx - mad r32.xyz, r19.yyyy, r33.xyzx, r32.xyzx - add r31.xyz, -r34.xyzx, r31.xyzx - mad r31.xyz, r19.yyyy, r31.xyzx, r34.xyzx - mad r27.w, r27.w, l(0.500000), l(0.500000) - add r32.xyz, -r32.xyzx, r35.xyzx - add r31.xyz, -r31.xyzx, r37.xyzx - add r31.xyz, -r32.xyzx, r31.xyzx - mad r31.xyz, r27.wwww, r31.xyzx, r32.xyzx - add r31.xyz, r30.xyzx, r31.xyzx - movc r32.xyz, r19.wwww, r31.xyzx, r30.xyzx - iadd r32.w, r30.w, l(1) - movc r31.xyz, r28.wwww, r39.xyzx, r29.xyzx - movc r32.xyzw, r28.wwww, r32.xyzw, r30.xyzw - dp3 r27.w, r36.xyzx, r41.xyzx - mad r28.w, r27.w, r29.w, r33.w - max r33.y, r28.w, l(0.000000) - dp3 r28.w, r36.xyzx, r36.xyzx - mad r33.x, -r27.w, r27.w, r28.w - movc r33.xy, r36.wwww, r33.xyxx, r45.xyxx - movc r33.xy, r31.wwww, r33.xyxx, r45.xyxx - mul r27.w, r33.y, r33.y - ge r27.w, r33.x, r27.w - if_nz r27.w - iadd r27.w, r23.w, l(1) - mov r28.xyz, r38.xyzx - mov r29.xyz, r31.xyzx - mov r30.xyzw, r32.xyzw - mov r23.w, r27.w - continue - endif - mov r28.xyz, r38.xyzx - mov r29.xyz, r31.xyzx - mov r30.xyzw, r32.xyzw - iadd r23.w, r23.w, l(1) - endloop - ld_raw r23.w, l(52), g0.xxxx - mov r31.xyz, r28.xyzx - mov r32.xyz, r29.xyzx - mov r33.xyzw, r30.xyzw - mov r27.w, l(0) - loop - uge r28.w, r27.w, r23.w - breakc_nz r28.w - iadd r34.xy, r20.yzyy, r27.wwww - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r35.xyzw, r34.x, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r34.xyzw, r34.y, l(0), t7.xyzw - add r34.xyzw, -r35.xyzw, r34.xyzw - mad r36.xyzw, r19.xxxx, r34.xyzw, r35.xyzw - max r28.w, r36.w, l(0.000000) - mad r34.xyz, r19.yyyy, r34.xyzx, r35.xyzx - add r35.xyz, r31.xyzx, -r36.xyzx - add r37.xyz, r27.xyzx, -r34.xyzx - dp3 r29.w, r35.xyzx, r35.xyzx - add r35.w, r29.w, l(0.000000) - dp3 r29.w, r37.xyzx, r37.xyzx - mul r31.w, r28.w, r28.w - mad r29.w, -r28.w, r28.w, r29.w - dp3 r32.w, r37.xyzx, r35.xyzx - mad r32.w, -r28.w, r28.w, r32.w - mad r34.w, -r28.w, r28.w, r35.w - mul r36.w, r29.w, r34.w - mad r36.w, r32.w, r32.w, -r36.w - sqrt r37.w, r36.w - add r29.w, -r29.w, r32.w - add r32.w, r32.w, -r34.w - add r32.w, r29.w, r32.w - add r34.w, r37.w, r29.w - min r34.w, r34.w, l(0.000000) - div r34.w, r34.w, r32.w - lt r38.x, r34.w, l(1.000000) - lt r29.w, r29.w, r37.w - and r29.w, r29.w, r38.x - mul r31.w, r31.w, r32.w - mul r31.w, r31.w, l(-0.360000) - lt r31.w, r31.w, r36.w - and r29.w, r29.w, r31.w - lt r31.w, r32.w, l(-0.000000) - and r29.w, r29.w, r31.w - add r37.xyz, -r35.xyzx, r37.xyzx - add r31.w, -r34.w, l(1.000000) - mul r32.w, r31.w, r32.w - div r32.w, r37.w, r32.w - add r32.w, -r32.w, l(1.000000) - div r31.w, r31.w, r32.w - mad r37.xyz, r37.xyzx, r31.wwww, r35.xyzx - add r38.xyz, r36.xyzx, r37.xyzx - dp3 r31.w, r37.xyzx, r37.xyzx - add r37.w, r31.w, l(0.000000) - movc r31.xyz, r29.wwww, r38.xyzx, r31.xyzx - movc r35.xyzw, r29.wwww, r37.xyzw, r35.xyzw - rsq r29.w, r35.w - mul r31.w, r28.w, r29.w - lt r31.w, l(1.000000), r31.w - mad r28.w, r29.w, r28.w, l(-1.000000) - mad r35.xyz, r35.xyzx, r28.wwww, r32.xyzx - add r34.xyz, -r34.xyzx, r36.xyzx - add r34.xyz, r33.xyzx, r34.xyzx - movc r34.xyz, r19.wwww, r34.xyzx, r33.xyzx - iadd r34.w, r33.w, l(1) - movc r32.xyz, r31.wwww, r35.xyzx, r32.xyzx - movc r33.xyzw, r31.wwww, r34.xyzw, r33.xyzw - iadd r27.w, r27.w, l(1) - endloop - if_nz r33.w - utof r23.w, r33.w - div r23.w, l(1.000000, 1.000000, 1.000000, 1.000000), r23.w - if_nz r19.w - ld_raw r27.w, l(80), g0.xxxx - dp3 r28.w, r32.xyzx, r32.xyzx - add r29.w, r28.w, l(0.000000) - rsq r29.w, r29.w - mul r31.xyz, r29.wwww, r32.xyzx - add r34.xyz, r25.xyzx, -r27.xyzx - mad r34.xyz, -r33.xyzx, r23.wwww, r34.xyzx - dp3 r31.w, r34.xyzx, r31.xyzx - mad r31.xyz, -r31.wwww, r31.xyzx, r34.xyzx - dp3 r31.w, r31.xyzx, r31.xyzx - add r31.w, r31.w, l(0.000000) - rsq r31.w, r31.w - mul r27.w, -r27.w, r28.w - mul r27.w, r29.w, r27.w - mul r27.w, r23.w, r27.w - mul r27.w, r31.w, r27.w - max r27.w, r27.w, l(-1.000000) - mad r27.xyz, -r31.xyzx, r27.wwww, r27.xyzx - store_structured u0.xyz, r22.w, l(0), r27.xyzx - endif - mad r25.xyz, r32.xyzx, r23.wwww, r25.xyzx - store_structured u0.xyzw, r21.x, l(0), r25.xyzw - endif - iadd r20.w, r20.w, l(1024) - endloop - else - ld_raw r19.zw, l(76), g0.xxxy - lt r19.zw, l(0.000000, 0.000000, 0.000000, 0.000000), r19.wwwz - ld_raw r20.x, l(0), g0.xxxx - ld_raw r20.yz, l(48), g1.xxyx - ld_raw r20.w, l(80), g0.xxxx - lt r21.x, l(0.000000), r20.w - ld_raw r23.yz, l(44), g0.xxyx - mov r22.w, vThreadIDInGroup.x - loop - uge r23.w, r22.w, r20.x - breakc_nz r23.w - iadd r23.w, r0.y, r22.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r25.xyzw, r23.w, l(0), u0.xyzw - mov r31.xyzw, l(0,0,0,0) - mov r27.xyzw, l(0,0,0,0) - loop - uge r28.w, r27.w, r23.y - breakc_nz r28.w - iadd r28.w, r23.z, r27.w - ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r34.xy, r28.w, l(0), t6.xyxx - iadd r34.xyzw, r20.yzyz, r34.xxyy - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r35.xyzw, r34.x, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r36.xyzw, r34.y, l(0), t7.xyzw - add r37.xyzw, -r35.xyzw, r36.xyzw - mad r37.xyzw, r19.xxxx, r37.xyzw, r35.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r38.xyzw, r34.z, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r34.xyzw, r34.w, l(0), t7.xyzw - add r39.xyzw, -r38.xyzw, r34.xyzw - mad r39.xyzw, r19.xxxx, r39.xyzw, r38.xyzw - max r37.w, r37.w, l(0.000000) - max r39.w, r39.w, l(0.000000) - add r40.xyzw, -r37.xyzw, r39.xyzw - mul r41.xyzw, r40.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) - dp3 r28.w, r41.xyzx, r41.xyzx - mad r29.w, -r41.w, r41.w, r28.w - ge r32.w, l(0.000000), r29.w - if_nz r32.w - iadd r32.w, r27.w, l(1) - mov r27.w, r32.w - continue - endif - rsq r32.w, r28.w - rsq r29.w, r29.w - mul r28.w, r28.w, r32.w - add r40.xyz, r37.xyzx, r39.xyzx - mad r34.w, r40.w, l(0.500000), r37.w - mul r34.w, r29.w, r34.w - mul r34.w, r28.w, r34.w - mul r41.xyz, r32.wwww, r41.xyzx - mul r29.w, r29.w, r41.w - mad r40.xyz, -r40.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), r25.xyzx - dp3 r35.w, r40.xyzx, r41.xyzx - mad r34.w, r35.w, r29.w, r34.w - max r34.w, r34.w, l(0.000000) - dp3 r36.w, r40.xyzx, r40.xyzx - mad r36.w, -r35.w, r35.w, r36.w - mul r37.w, r34.w, r34.w - lt r37.w, r37.w, r36.w - if_nz r37.w - iadd r37.w, r27.w, l(1) - mov r27.w, r37.w - continue - endif - mul r32.w, r32.w, r41.w - mad r32.w, -r32.w, r32.w, l(1.000000) - max r36.w, r36.w, l(0.000000) - rsq r37.w, r36.w - mul r29.w, r29.w, r36.w - mad r29.w, r29.w, r37.w, r35.w - lt r28.w, |r29.w|, r28.w - mad r40.xyz, -r29.wwww, r41.xyzx, r40.xyzx - mul r29.w, r34.w, r37.w - mad r29.w, r29.w, r32.w, -r32.w - mad r40.xyz, r40.xyzx, r29.wwww, r27.xyzx - add r36.xyz, -r35.xyzx, r36.xyzx - mad r35.xyz, r19.yyyy, r36.xyzx, r35.xyzx - add r34.xyz, -r38.xyzx, r34.xyzx - mad r34.xyz, r19.yyyy, r34.xyzx, r38.xyzx - mad r29.w, r35.w, l(0.500000), l(0.500000) - add r35.xyz, -r35.xyzx, r37.xyzx - add r34.xyz, -r34.xyzx, r39.xyzx - add r34.xyz, -r35.xyzx, r34.xyzx - mad r34.xyz, r29.wwww, r34.xyzx, r35.xyzx - add r34.xyz, r31.xyzx, r34.xyzx - movc r34.xyz, r21.xxxx, r34.xyzx, r31.xyzx - iadd r34.w, r31.w, l(1) - movc r27.xyz, r28.wwww, r40.xyzx, r27.xyzx - movc r31.xyzw, r28.wwww, r34.xyzw, r31.xyzw - iadd r27.w, r27.w, l(1) - endloop - ld_raw r27.w, l(52), g0.xxxx - mov r34.xyz, r27.xyzx - mov r35.xyzw, r31.xyzw - mov r28.w, l(0) - loop - uge r29.w, r28.w, r27.w - breakc_nz r29.w - iadd r36.xy, r20.yzyy, r28.wwww - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r37.xyzw, r36.x, l(0), t7.xyzw - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r36.xyzw, r36.y, l(0), t7.xyzw - add r36.xyzw, -r37.xyzw, r36.xyzw - mad r38.xyzw, r19.xxxx, r36.xyzw, r37.xyzw - max r29.w, r38.w, l(0.000000) - add r39.xyz, r25.xyzx, -r38.xyzx - dp3 r32.w, r39.xyzx, r39.xyzx - add r32.w, r32.w, l(0.000000) - rsq r32.w, r32.w - mul r34.w, r29.w, r32.w - lt r34.w, l(1.000000), r34.w - mad r29.w, r32.w, r29.w, l(-1.000000) - mad r39.xyz, r39.xyzx, r29.wwww, r34.xyzx - mad r36.xyz, r19.yyyy, r36.xyzx, r37.xyzx - add r36.xyz, -r36.xyzx, r38.xyzx - add r36.xyz, r35.xyzx, r36.xyzx - movc r36.xyz, r21.xxxx, r36.xyzx, r35.xyzx - iadd r36.w, r35.w, l(1) - movc r34.xyz, r34.wwww, r39.xyzx, r34.xyzx - movc r35.xyzw, r34.wwww, r36.xyzw, r35.xyzw - iadd r28.w, r28.w, l(1) - endloop - if_nz r35.w - utof r27.w, r35.w - div r27.w, l(1.000000, 1.000000, 1.000000, 1.000000), r27.w - if_nz r19.z - iadd r28.w, r0.x, r22.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r36.xyz, r28.w, l(0), u0.xyzx - ld_raw r29.w, l(80), g0.xxxx - dp3 r32.w, r34.xyzx, r34.xyzx - add r34.w, r32.w, l(0.000000) - rsq r34.w, r34.w - mul r37.xyz, r34.wwww, r34.xyzx - add r38.xyz, r25.xyzx, -r36.xyzx - mad r38.xyz, -r35.xyzx, r27.wwww, r38.xyzx - dp3 r36.w, r38.xyzx, r37.xyzx - mad r37.xyz, -r36.wwww, r37.xyzx, r38.xyzx - dp3 r36.w, r37.xyzx, r37.xyzx - add r36.w, r36.w, l(0.000000) - rsq r36.w, r36.w - mul r29.w, -r29.w, r32.w - mul r29.w, r34.w, r29.w - mul r29.w, r27.w, r29.w - mul r29.w, r36.w, r29.w - max r29.w, r29.w, l(-1.000000) - mad r36.xyz, -r37.xyzx, r29.wwww, r36.xyzx - store_structured u0.xyz, r28.w, l(0), r36.xyzx - endif - mad r36.xyz, r34.xyzx, r27.wwww, r25.xyzx - dp3 r25.x, r34.xyzx, r34.xyzx - ld_raw r25.y, l(76), g0.xxxx - mad r25.x, r25.y, r25.x, l(1.000000) - div r25.x, r25.w, r25.x - movc r36.w, r19.w, r25.x, r25.w - store_structured u0.xyzw, r23.w, l(0), r36.xyzw - endif - iadd r22.w, r22.w, l(1024) - endloop - endif - ld_raw r19.x, l(84), g0.xxxx - ld_raw r19.y, l(72), g1.xxxx - min r19.x, r19.y, r19.x - lt r19.x, l(0.000000), r19.x - if_nz r19.x - ld_raw r19.x, l(88), g0.xxxx - ld_raw r19.y, l(0), g0.xxxx - if_nz r1.z - ld_raw r19.zw, r4.w, g1.xxxy - add r20.x, r19.w, r19.z - mad r19.zw, r20.xxxx, l(0.000000, 0.000000, 0.000100, 0.000100), r19.wwwz - add r19.w, r19.z, r19.w - store_structured g6.x, vThreadIDInGroup.x, l(0), r19.w - else - mov r19.zw, l(0,0,0,0) - endif - sync_g_t - if_nz r1.z - ld_structured r20.x, l(0), l(0), g6.xxxx - ld_structured r20.y, l(1), l(0), g6.xxxx - lt r20.x, r20.y, r20.x - and r20.y, r20.x, l(1) - ld_structured r20.y, r20.y, l(0), g6.xxxx - ld_structured r20.z, l(2), l(0), g6.xxxx - lt r20.y, r20.z, r20.y - movc r20.x, r20.y, l(-2), r20.x - iadd r20.x, r20.x, vThreadIDInGroup.x - ushr r20.y, r20.x, l(30) - iadd r20.x, r20.y, r20.x - div r19.w, l(127.000000), r19.w - ld_raw r20.y, l(84), g0.xxxx - div r20.y, l(1.000000, 1.000000, 1.000000, 1.000000), r20.y - min r19.w, r19.w, r20.y - ishl r20.x, r20.x, l(2) - iadd r20.yz, r20.xxxx, l(0, 12, 24, 0) - store_raw g5.x, r20.y, r19.w - mul r19.z, r19.z, r19.w - store_raw g5.x, r20.x, r19.z - store_raw g5.x, r20.z, vThreadIDInGroup.x - endif - sync_g_t - ld_raw r19.z, l(100), g0.xxxx - ishl r19.w, r19.x, l(1) - iadd r19.z, r19.w, r19.z - ld_raw r19.w, l(116), g1.xxxx - if_nz r19.w - mov r19.w, vThreadIDInGroup.x - loop - ige r20.x, r19.w, l(0x00004103) - breakc_nz r20.x - iadd r20.x, r19.w, r19.z - store_structured u2.x, r20.x, l(0), l(-1) - iadd r19.w, r19.w, l(1024) - endloop - endif - ld_raw r20.xy, l(16), g5.xyxx - ld_raw r20.zw, l(4), g5.xxxy - ld_raw r23.yz, l(28), g5.xxyx - ld_raw r19.w, l(92), g0.xxxx - ine r21.x, r19.w, l(-1) - ld_raw r22.w, l(100), g0.xxxx - mov r23.w, vThreadIDInGroup.x - loop - ige r25.x, r23.w, r19.x - breakc_nz r25.x - iadd r25.x, r19.w, r23.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r25.x, r25.x, l(0), t15.xxxx - movc r25.x, r21.x, r25.x, r23.w - iadd r25.y, r0.y, r25.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r36.xyzw, r25.y, l(0), u0.xyzw - dp4 r25.y, r36.xyzw, icb[r23.y + 0].xyzw - mad r25.y, r25.y, r20.x, r20.z - min r25.y, r25.y, l(127.500000) - max r25.y, r25.y, l(0.000000) - dp4 r25.z, r36.xyzw, icb[r23.z + 0].xyzw - mad r25.z, r25.z, r20.y, r20.w - min r25.z, r25.z, l(127.500000) - max r25.z, r25.z, l(0.000000) - ftoi r25.yz, r25.yyzy - iadd r25.w, r22.w, r23.w - ishl r25.z, r25.z, l(23) - imad r25.y, r25.y, l(0x00010000), r25.z - iadd r25.y, r25.y, l(0x00810000) - or r25.x, r25.x, r25.y - store_structured u2.x, r25.w, l(0), r25.x - iadd r23.w, r23.w, l(1024) - endloop - sync_g_t - ld_raw r25.xy, l(96), g0.xyxx - iadd r19.w, r19.x, r25.y - mov r21.x, vThreadIDInGroup.x - loop - ige r22.w, r21.x, r19.y - breakc_nz r22.w - iadd r22.w, r21.x, r25.x - iadd r23.w, r0.y, r21.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r36.xyzw, r23.w, l(0), u0.xyzw - store_structured u1.xyzw, r22.w, l(0), r36.xyzw - iadd r21.x, r21.x, l(1024) - endloop - sync_g_t - iadd r21.x, r19.x, l(31) - ubfe r22.w, l(5), l(5), r21.x - ushr r21.x, r21.x, l(10) - ult r23.w, r4.y, r22.w - and r25.x, r23.w, l(1) - iadd r25.x, r21.x, r25.x - movc r25.z, r23.w, l(0), l(1) - imul null, r25.z, r22.w, r25.z - imad r25.z, r4.y, r25.x, r25.z - ishl r25.xw, r25.xxxz, l(5, 0, 0, 5) - iadd r25.x, r25.x, r25.w - umin r25.x, r19.x, r25.x - bfi r25.z, l(27), l(5), r25.z, vThreadIDInGroup.x - mov r25.w, l(16) - mov r27.w, r25.y - mov r28.w, r19.w - loop - uge r29.w, r25.w, l(32) - breakc_nz r29.w - mov r29.w, l(0) - mov r32.w, l(0) - mov r34.w, r25.z - loop - uge r36.x, r32.w, r21.x - breakc_nz r36.x - ult r36.x, r34.w, r25.x - iadd r36.y, r27.w, r34.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r36.y, r36.y, l(0), u2.xxxx - movc r36.x, r36.x, r36.y, l(-1) - ushr r36.x, r36.x, r25.w - and r36.xyzw, r36.xxxx, l(1, 2, 4, 8) - ine r36.xyzw, r36.xyzw, l(0, 0, 0, 0) - bfi r36.xyzw, l(1, 1, 1, 1), vThreadIDInGroup.xxxx, r36.xyzw, l(0, 0, 0, 0) - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - sync_g_t - if_nz r7.x - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r3.x, l(0), g3.xxxx - ld_structured r37.y, r6.y, l(0), g3.xxxx - ld_structured r37.z, r9.x, l(0), g3.xxxx - ld_structured r37.w, r6.z, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - sync_g_t - if_nz r7.y - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r3.y, l(0), g3.xxxx - ld_structured r37.y, r6.w, l(0), g3.xxxx - ld_structured r37.z, r9.y, l(0), g3.xxxx - ld_structured r37.w, r8.x, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - sync_g_t - if_nz r7.z - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r3.z, l(0), g3.xxxx - ld_structured r37.y, r8.y, l(0), g3.xxxx - ld_structured r37.z, r9.z, l(0), g3.xxxx - ld_structured r37.w, r8.z, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - sync_g_t - if_nz r7.w - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r3.w, l(0), g3.xxxx - ld_structured r37.y, r8.w, l(0), g3.xxxx - ld_structured r37.z, r9.w, l(0), g3.xxxx - ld_structured r37.w, r13.x, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - sync_g_t - if_nz r5.w - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r6.x, l(0), g3.xxxx - ld_structured r37.y, r13.y, l(0), g3.xxxx - ld_structured r37.z, r14.x, l(0), g3.xxxx - ld_structured r37.w, r13.z, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - sync_g_t - ld_structured r36.x, r5.z, l(0), g3.xxxx - ld_structured r36.y, r10.x, l(0), g3.xxxx - ld_structured r36.z, r10.y, l(0), g3.xxxx - ld_structured r36.w, r10.z, l(0), g3.xxxx - xor r36.xy, r2.zwzz, r36.xyxx - and r36.x, r36.y, r36.x - xor r36.y, r5.x, r36.z - and r36.x, r36.y, r36.x - xor r36.y, r5.y, r36.w - and r36.x, r36.y, r36.x - countbits r36.x, r36.x - iadd r29.w, r29.w, r36.x - iadd r32.w, r32.w, l(1) - iadd r34.w, r34.w, l(32) - endloop - if_nz r22.w - iadd r32.w, r27.w, r34.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r32.w, r32.w, l(0), u2.xxxx - if_nz r23.w - ult r36.x, r34.w, r25.x - movc r32.w, r36.x, r32.w, l(-1) - ushr r32.w, r32.w, r25.w - and r36.xyzw, r32.wwww, l(1, 2, 4, 8) - ine r36.xyzw, r36.xyzw, l(0, 0, 0, 0) - bfi r36.xyzw, l(1, 1, 1, 1), vThreadIDInGroup.xxxx, r36.xyzw, l(0, 0, 0, 0) - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - sync_g_t - if_nz r23.w - if_nz r7.x - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r3.x, l(0), g3.xxxx - ld_structured r37.y, r6.y, l(0), g3.xxxx - ld_structured r37.z, r9.x, l(0), g3.xxxx - ld_structured r37.w, r6.z, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - endif - sync_g_t - if_nz r23.w - if_nz r7.y - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r3.y, l(0), g3.xxxx - ld_structured r37.y, r6.w, l(0), g3.xxxx - ld_structured r37.z, r9.y, l(0), g3.xxxx - ld_structured r37.w, r8.x, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - endif - sync_g_t - if_nz r23.w - if_nz r7.z - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r3.z, l(0), g3.xxxx - ld_structured r37.y, r8.y, l(0), g3.xxxx - ld_structured r37.z, r9.z, l(0), g3.xxxx - ld_structured r37.w, r8.z, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - endif - sync_g_t - if_nz r23.w - if_nz r7.w - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r3.w, l(0), g3.xxxx - ld_structured r37.y, r8.w, l(0), g3.xxxx - ld_structured r37.z, r9.w, l(0), g3.xxxx - ld_structured r37.w, r13.x, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - endif - sync_g_t - if_nz r23.w - if_nz r5.w - ld_structured r36.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r36.y, r12.x, l(0), g3.xxxx - ld_structured r36.z, r12.y, l(0), g3.xxxx - ld_structured r36.w, r12.z, l(0), g3.xxxx - ld_structured r37.x, r6.x, l(0), g3.xxxx - ld_structured r37.y, r13.y, l(0), g3.xxxx - ld_structured r37.z, r14.x, l(0), g3.xxxx - ld_structured r37.w, r13.z, l(0), g3.xxxx - or r36.xyzw, r36.xyzw, r37.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r36.x - store_structured g3.x, r12.x, l(0), r36.y - store_structured g3.x, r12.y, l(0), r36.z - store_structured g3.x, r12.z, l(0), r36.w - endif - endif - sync_g_t - if_nz r23.w - ld_structured r36.x, r5.z, l(0), g3.xxxx - ld_structured r36.y, r10.x, l(0), g3.xxxx - ld_structured r36.z, r10.y, l(0), g3.xxxx - ld_structured r36.w, r10.z, l(0), g3.xxxx - else - mov r36.xyzw, l(0,0,0,0) - endif - xor r32.w, r2.z, r36.x - xor r36.x, r2.w, r36.y - and r32.w, r32.w, r36.x - xor r36.xy, r5.xyxx, r36.zwzz - and r32.w, r32.w, r36.x - and r32.w, r36.y, r32.w - countbits r32.w, r32.w - and r32.w, r23.w, r32.w - iadd r29.w, r29.w, r32.w - endif - if_nz r7.x - store_structured g3.x, r11.x, l(0), r29.w - endif - sync_g_t - if_z vThreadIDInGroup.x - store_structured g3.x, l(4096), l(0), l(0) - store_structured g3.x, l(4609), l(0), l(0) - endif - if_nz r1.w - if_nz r16.x - ld_structured r32.w, r14.y, l(0), g3.xxxx - ld_structured r36.x, r10.w, l(0), g3.xxxx - iadd r32.w, r32.w, r36.x - store_structured g3.x, r11.w, l(0), r32.w - else - ld_structured r32.w, l(4097), l(0), g3.xxxx - store_structured g3.x, l(4610), l(0), r32.w - endif - endif - sync_g_t - if_nz r1.w - if_nz r16.y - ld_structured r32.w, r11.w, l(0), g3.xxxx - ld_structured r36.x, r12.w, l(0), g3.xxxx - iadd r32.w, r32.w, r36.x - else - ld_structured r32.w, r11.w, l(0), g3.xxxx - endif - store_structured g3.x, r15.x, l(0), r32.w - endif - sync_g_t - if_nz r1.w - if_nz r16.z - ld_structured r32.w, r14.y, l(0), g3.xxxx - ld_structured r36.x, r15.w, l(0), g3.xxxx - iadd r32.w, r32.w, r36.x - else - ld_structured r32.w, r14.y, l(0), g3.xxxx - endif - store_structured g3.x, r15.z, l(0), r32.w - endif - sync_g_t - if_nz r1.w - if_nz r16.w - ld_structured r32.w, r11.w, l(0), g3.xxxx - ld_structured r36.x, r14.z, l(0), g3.xxxx - iadd r32.w, r32.w, r36.x - else - ld_structured r32.w, r11.w, l(0), g3.xxxx - endif - store_structured g3.x, r15.x, l(0), r32.w - endif - sync_g_t - if_nz r1.w - if_nz r18.x - ld_structured r32.w, r14.y, l(0), g3.xxxx - ld_structured r36.x, r17.y, l(0), g3.xxxx - iadd r32.w, r32.w, r36.x - else - ld_structured r32.w, r14.y, l(0), g3.xxxx - endif - store_structured g3.x, r15.z, l(0), r32.w - endif - sync_g_t - if_nz r1.w - if_nz r18.y - ld_structured r32.w, r11.w, l(0), g3.xxxx - ld_structured r36.x, r14.w, l(0), g3.xxxx - iadd r32.w, r32.w, r36.x - else - ld_structured r32.w, r11.w, l(0), g3.xxxx - endif - store_structured g3.x, r15.x, l(0), r32.w - endif - sync_g_t - if_nz r1.w - if_nz r18.z - ld_structured r32.w, r14.y, l(0), g3.xxxx - ld_structured r36.x, r17.w, l(0), g3.xxxx - iadd r32.w, r32.w, r36.x - else - ld_structured r32.w, r14.y, l(0), g3.xxxx - endif - store_structured g3.x, r15.z, l(0), r32.w - endif - sync_g_t - if_nz r1.w - if_nz r18.w - ld_structured r32.w, r11.w, l(0), g3.xxxx - ld_structured r36.x, r13.w, l(0), g3.xxxx - iadd r32.w, r32.w, r36.x - else - ld_structured r32.w, r11.w, l(0), g3.xxxx - endif - store_structured g3.x, r15.x, l(0), r32.w - endif - sync_g_t - if_nz r1.w - if_nz r15.y - ld_structured r32.w, r14.y, l(0), g3.xxxx - ld_structured r36.x, r17.z, l(0), g3.xxxx - iadd r32.w, r32.w, r36.x - else - ld_structured r32.w, r14.y, l(0), g3.xxxx - endif - store_structured g3.x, r15.z, l(0), r32.w - endif - sync_g_t - mov r32.w, l(0) - mov r36.x, r25.z - loop - uge r36.y, r32.w, r21.x - breakc_nz r36.y - ult r36.y, r36.x, r25.x - iadd r36.z, r27.w, r36.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r36.z, r36.z, l(0), u2.xxxx - movc r36.z, r36.y, r36.z, l(-1) - ushr r36.w, r36.z, r25.w - and r37.xyzw, r36.wwww, l(1, 2, 4, 8) - ine r38.xyzw, r37.xyzw, l(0, 0, 0, 0) - bfi r39.xyzw, l(1, 1, 1, 1), vThreadIDInGroup.xxxx, r38.xyzw, l(0, 0, 0, 0) - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - sync_g_t - if_nz r7.x - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r3.x, l(0), g3.xxxx - ld_structured r40.y, r6.y, l(0), g3.xxxx - ld_structured r40.z, r9.x, l(0), g3.xxxx - ld_structured r40.w, r6.z, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - if_nz r7.y - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r3.y, l(0), g3.xxxx - ld_structured r40.y, r6.w, l(0), g3.xxxx - ld_structured r40.z, r9.y, l(0), g3.xxxx - ld_structured r40.w, r8.x, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - if_nz r7.z - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r3.z, l(0), g3.xxxx - ld_structured r40.y, r8.y, l(0), g3.xxxx - ld_structured r40.z, r9.z, l(0), g3.xxxx - ld_structured r40.w, r8.z, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - if_nz r7.w - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r3.w, l(0), g3.xxxx - ld_structured r40.y, r8.w, l(0), g3.xxxx - ld_structured r40.z, r9.w, l(0), g3.xxxx - ld_structured r40.w, r13.x, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - if_nz r5.w - ld_structured r39.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r39.y, r12.x, l(0), g3.xxxx - ld_structured r39.z, r12.y, l(0), g3.xxxx - ld_structured r39.w, r12.z, l(0), g3.xxxx - ld_structured r40.x, r6.x, l(0), g3.xxxx - ld_structured r40.y, r13.y, l(0), g3.xxxx - ld_structured r40.z, r14.x, l(0), g3.xxxx - ld_structured r40.w, r13.z, l(0), g3.xxxx - or r39.xyzw, r39.xyzw, r40.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r39.x - store_structured g3.x, r12.x, l(0), r39.y - store_structured g3.x, r12.y, l(0), r39.z - store_structured g3.x, r12.z, l(0), r39.w - endif - sync_g_t - ld_structured r37.y, r5.z, l(0), g3.xxxx - ld_structured r37.z, r10.x, l(0), g3.xxxx - ld_structured r37.w, r10.y, l(0), g3.xxxx - ld_structured r38.x, r10.z, l(0), g3.xxxx - bfi r36.w, l(4), l(5), r36.w, l(0) - iadd r36.w, r11.y, r36.w - iadd r36.w, r36.w, l(4096) - ld_structured r36.w, r36.w, l(0), g3.xxxx - if_nz r36.y - iadd r36.y, r37.x, l(-1) - xor r36.y, r37.y, r36.y - ieq r38.yzw, r38.yyzw, l(0, 0, 0, 0) - xor r37.x, r37.z, r38.y - and r36.y, r36.y, r37.x - xor r37.x, r37.w, r38.z - and r36.y, r36.y, r37.x - xor r37.x, r38.x, r38.w - and r36.y, r36.y, r37.x - ubfe r36.y, vThreadIDInGroup.x, l(0), r36.y - countbits r36.y, r36.y - iadd r36.y, r36.y, r36.w - iadd r36.y, r28.w, r36.y - store_structured u2.x, r36.y, l(0), r36.z - endif - sync_g_t - if_nz r7.x - ld_structured r36.y, r11.z, l(0), g3.xxxx - xor r36.zw, r2.zzzw, r37.yyyz - and r36.z, r36.w, r36.z - xor r36.w, r5.x, r37.w - and r36.z, r36.w, r36.z - xor r36.w, r5.y, r38.x - and r36.z, r36.w, r36.z - countbits r36.z, r36.z - iadd r36.y, r36.z, r36.y - store_structured g3.x, r11.z, l(0), r36.y - endif - iadd r32.w, r32.w, l(1) - iadd r36.x, r36.x, l(32) - endloop - if_nz r22.w - ult r32.w, r36.x, r25.x - iadd r36.y, r27.w, r36.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r36.y, r36.y, l(0), u2.xxxx - movc r36.y, r32.w, r36.y, l(-1) - ushr r36.z, r36.y, r25.w - if_nz r23.w - and r37.xyzw, r36.zzzz, l(1, 2, 4, 8) - ine r37.xyzw, r37.xyzw, l(0, 0, 0, 0) - bfi r37.xyzw, l(1, 1, 1, 1), vThreadIDInGroup.xxxx, r37.xyzw, l(0, 0, 0, 0) - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - sync_g_t - if_nz r23.w - if_nz r7.x - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.x, l(0), g3.xxxx - ld_structured r38.y, r6.y, l(0), g3.xxxx - ld_structured r38.z, r9.x, l(0), g3.xxxx - ld_structured r38.w, r6.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r23.w - if_nz r7.y - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.y, l(0), g3.xxxx - ld_structured r38.y, r6.w, l(0), g3.xxxx - ld_structured r38.z, r9.y, l(0), g3.xxxx - ld_structured r38.w, r8.x, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r23.w - if_nz r7.z - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.z, l(0), g3.xxxx - ld_structured r38.y, r8.y, l(0), g3.xxxx - ld_structured r38.z, r9.z, l(0), g3.xxxx - ld_structured r38.w, r8.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r23.w - if_nz r7.w - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r3.w, l(0), g3.xxxx - ld_structured r38.y, r8.w, l(0), g3.xxxx - ld_structured r38.z, r9.w, l(0), g3.xxxx - ld_structured r38.w, r13.x, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r23.w - if_nz r5.w - ld_structured r37.x, vThreadIDInGroup.x, l(0), g3.xxxx - ld_structured r37.y, r12.x, l(0), g3.xxxx - ld_structured r37.z, r12.y, l(0), g3.xxxx - ld_structured r37.w, r12.z, l(0), g3.xxxx - ld_structured r38.x, r6.x, l(0), g3.xxxx - ld_structured r38.y, r13.y, l(0), g3.xxxx - ld_structured r38.z, r14.x, l(0), g3.xxxx - ld_structured r38.w, r13.z, l(0), g3.xxxx - or r37.xyzw, r37.xyzw, r38.xyzw - store_structured g3.x, vThreadIDInGroup.x, l(0), r37.x - store_structured g3.x, r12.x, l(0), r37.y - store_structured g3.x, r12.y, l(0), r37.z - store_structured g3.x, r12.z, l(0), r37.w - endif - endif - sync_g_t - if_nz r23.w - ld_structured r37.x, r5.z, l(0), g3.xxxx - ld_structured r37.y, r10.x, l(0), g3.xxxx - ld_structured r37.z, r10.y, l(0), g3.xxxx - ld_structured r37.w, r10.z, l(0), g3.xxxx - and r38.xyzw, r36.zzzz, l(1, 2, 4, 8) - iadd r36.w, r38.x, l(-1) - xor r36.w, r37.x, r36.w - ine r38.xyz, r38.yzwy, l(0, 0, 0, 0) - ieq r38.xyz, r38.xyzx, l(0, 0, 0, 0) - xor r38.xyz, r37.yzwy, r38.xyzx - and r36.w, r36.w, r38.x - and r36.w, r38.y, r36.w - and r36.w, r38.z, r36.w - bfi r36.z, l(4), l(5), r36.z, l(0) - iadd r36.z, r11.y, r36.z - iadd r36.z, r36.z, l(4096) - ld_structured r36.z, r36.z, l(0), g3.xxxx - ubfe r36.w, vThreadIDInGroup.x, l(0), r36.w - countbits r36.w, r36.w - iadd r36.z, r36.w, r36.z - else - mov r37.xyzw, l(0,0,0,0) - mov r36.z, l(0) - endif - if_nz r32.w - iadd r32.w, r28.w, r36.z - store_structured u2.x, r32.w, l(0), r36.y - endif - sync_g_t - if_nz r23.w - if_nz r7.x - ld_structured r32.w, r11.z, l(0), g3.xxxx - xor r36.yz, r2.zzwz, r37.xxyx - and r36.y, r36.z, r36.y - xor r36.zw, r5.xxxy, r37.zzzw - and r36.y, r36.z, r36.y - and r36.y, r36.w, r36.y - countbits r36.y, r36.y - iadd r32.w, r32.w, r36.y - store_structured g3.x, r11.z, l(0), r32.w - endif - endif - endif - iadd r25.w, r25.w, l(4) - mov r32.w, r28.w - mov r28.w, r27.w - mov r27.w, r32.w - endloop - mov r19.w, vThreadIDInGroup.x - loop - ige r21.x, r19.w, r19.x - breakc_nz r21.x - iadd r21.x, r19.w, r25.y - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r22.w, r21.x, l(0), u2.xxxx - ishr r22.w, r22.w, l(16) - iadd r21.x, r21.x, l(-1) - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r21.x, r21.x, l(0), u2.xxxx - ishr r21.x, r21.x, l(16) - iadd r23.w, r22.w, l(-1) - movc r21.x, r19.w, r21.x, r23.w - ine r23.w, r21.x, r22.w - if_nz r23.w - iadd r22.w, r19.z, r22.w - store_structured u2.x, r22.w, l(0), r19.w - iadd r21.x, r19.z, r21.x - iadd r21.x, r21.x, l(1) - store_structured u2.x, r21.x, l(0), r19.w - endif - iadd r19.w, r19.w, l(1024) - endloop - ld_raw r25.xy, l(96), g0.xyxx - mov r19.w, vThreadIDInGroup.x - loop - ige r21.x, r19.w, r19.x - breakc_nz r21.x - iadd r21.x, r19.w, r25.y - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r21.x, r21.x, l(0), u2.xxxx - and r21.x, r21.x, l(0x0000ffff) - iadd r21.x, r21.x, r25.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r37.xyzw, r21.x, l(0), u1.xyzw - iadd r21.x, r0.y, r19.w - store_structured u0.xyzw, r21.x, l(0), r37.xyzw - iadd r19.w, r19.w, l(1024) - endloop - sync_g_t - ld_raw r19.w, l(84), g0.xxxx - mul r21.x, r19.w, r19.w - ld_raw r22.w, l(100), g0.xxxx - ld_raw r23.w, l(112), g1.xxxx - mov r25.x, vThreadIDInGroup.x - loop - ige r25.y, r25.x, r19.x - breakc_nz r25.y - iadd r25.y, r22.w, r25.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r25.y, r25.y, l(0), u2.xxxx - and r25.y, r25.y, l(0x0000ffff) - iadd r25.z, r0.y, r25.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r37.xyzw, r25.z, l(0), u0.xyzw - iadd r25.z, r23.w, r25.y - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r36.yzw, r25.z, l(0), t14.xxyz - dp4 r25.z, r37.xyzw, icb[r23.y + 0].xyzw - mad r25.z, r25.z, r20.x, r20.z - min r25.z, r25.z, l(127.500000) - max r25.z, r25.z, l(0.000000) - dp4 r25.w, r37.xyzw, icb[r23.z + 0].xyzw - mad r25.w, r25.w, r20.y, r20.w - min r25.w, r25.w, l(127.500000) - max r25.w, r25.w, l(0.000000) - ftoi r25.zw, r25.zzzw - imad r25.z, r25.w, l(128), r25.z - iadd r25.w, r25.z, l(256) - add r27.w, r37.w, l(0.000000) - mov r38.xyz, l(0,0,0,0) - mov r28.w, l(0.000000) - mov r32.w, r25.z - loop - ilt r38.w, r25.w, r32.w - breakc_nz r38.w - iadd r38.w, r19.z, r32.w - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r39.x, r38.w, l(0), u2.xxxx - iadd r39.yzw, r38.wwww, l(0, 1, 2, 3) - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r38.w, r39.y, l(0), u2.xxxx - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r39.y, r39.z, l(0), u2.xxxx - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r39.z, r39.w, l(0), u2.xxxx - umin r39.x, r38.w, r39.x - umin r39.x, r39.y, r39.x - imax r38.w, r38.w, r39.y - imax r38.w, r39.z, r38.w - imax r38.w, r38.w, l(0) - mov r39.yzw, r38.xxyz - mov r40.x, r28.w - mov r40.y, r39.x - loop - uge r40.z, r40.y, r38.w - breakc_nz r40.z - ine r40.z, r25.x, r40.y - if_nz r40.z - iadd r40.z, r0.y, r40.y - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r41.xyzw, r40.z, l(0), u0.xyzw - add r41.xyz, r37.xyzx, -r41.xyzx - dp3 r40.z, r41.xyzx, r41.xyzx - lt r40.w, r21.x, r40.z - if_nz r40.w - iadd r40.w, r40.y, l(1) - mov r40.y, r40.w - continue - endif - ld_raw r40.w, l(112), g1.xxxx - ine r42.x, r40.w, l(-1) - if_nz r42.x - ld_raw r42.x, l(100), g0.xxxx - iadd r42.x, r40.y, r42.x - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r42.x, r42.x, l(0), u2.xxxx - and r42.x, r42.x, l(0x0000ffff) - iadd r40.w, r40.w, r42.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r42.xyz, r40.w, l(0), t14.xyzx - add r42.xyz, r36.yzwy, -r42.xyzx - dp3 r40.w, r42.xyzx, r42.xyzx - ge r42.x, r21.x, r40.w - if_nz r42.x - iadd r42.x, r40.y, l(1) - mov r40.y, r42.x - continue - endif - add r40.w, r40.w, l(0.000000) - div r40.w, r21.x, r40.w - rsq r40.w, r40.w - add r40.w, r40.w, l(-1.000000) - min r40.w, r40.w, l(1.000000) - else - mov r40.w, l(1.000000) - endif - add r40.z, r40.z, l(0.000000) - rsq r40.z, r40.z - mad r40.z, r19.w, r40.z, l(-1.000000) - max r40.z, r40.z, l(0.000000) - mul r42.x, r40.z, r40.z - mul r40.w, r40.w, r42.x - add r41.w, r27.w, r41.w - div r40.w, r40.w, r41.w - mad r39.yzw, r40.wwww, r41.xxyz, r39.yyzw - add r40.x, r40.z, r40.x - endif - iadd r40.y, r40.y, l(1) - endloop - mov r38.xyz, r39.yzwy - mov r28.w, r40.x - iadd r32.w, r32.w, l(128) - endloop - ld_raw r25.z, l(72), g1.xxxx - mul r25.z, r37.w, r25.z - div r25.z, r25.z, r28.w - ld_raw r25.w, l(96), g0.xxxx - iadd r25.y, r25.y, r25.w - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r36.yzw, r25.y, l(0), u1.xxyz - mad r36.yzw, r38.xxyz, r25.zzzz, r36.yyzw - store_structured u1.xyz, r25.y, l(0), r36.yzwy - iadd r25.x, r25.x, l(1024) - endloop - sync_g_t - ld_raw r19.w, l(96), g0.xxxx - mov r20.x, vThreadIDInGroup.x - loop - ige r20.y, r20.x, r19.y - breakc_nz r20.y - iadd r20.y, r19.w, r20.x - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r25.xyzw, r20.y, l(0), u1.xyzw - iadd r20.y, r0.y, r20.x - store_structured u0.xyzw, r20.y, l(0), r25.xyzw - iadd r20.x, r20.x, l(1024) - endloop - ld_raw r19.y, l(100), g0.xxxx - mov r19.w, vThreadIDInGroup.x - loop - ige r20.x, r19.w, r19.x - breakc_nz r20.x - iadd r20.x, r19.w, r19.y - ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r20.x, r20.x, l(0), u2.xxxx - ushr r20.x, r20.x, l(16) - iadd r20.x, r19.z, r20.x - store_structured u2.x, r20.x, l(0), l(-1) - iadd r20.y, r20.x, l(1) - store_structured u2.x, r20.y, l(0), l(-1) - iadd r19.w, r19.w, l(1024) - endloop - endif - if_z vThreadIDInGroup.x - ld_raw r19.x, l(8), g1.xxxx - mul r19.x, r19.x, l(1000.000000) - ftou r19.x, r19.x - umax r19.x, r19.x, l(1) - ld_raw r19.y, l(104), g1.xxxx - iadd r19.x, r19.x, r19.y - store_raw g1.x, l(104), r19.x - endif - sync_g_t - ld_raw r19.x, l(104), g1.xxxx - ld_raw r19.y, l(104), g0.xxxx - uge r19.x, r19.x, r19.y - if_nz r19.x - ld_raw r19.x, l(0), g0.xxxx - mov r19.y, l(0) - mov r19.z, vThreadIDInGroup.x - loop - uge r19.w, r19.z, r19.x - breakc_nz r19.w - iadd r19.w, r0.y, r19.z - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r20.xyz, r19.w, l(0), u0.xyzx - iadd r19.w, r0.x, r19.z - ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r23.yzw, r19.w, l(0), u0.xxyz - add r20.xyz, r20.xyzx, -r23.yzwy - max r19.w, |r20.y|, |r20.x| - max r19.w, |r20.z|, r19.w - max r19.y, r19.y, r19.w - iadd r19.z, r19.z, l(1024) - endloop - if_z vThreadIDInGroup.x - ld_raw r19.x, l(100), g1.xxxx - iadd r19.x, r19.x, l(1) - store_raw g1.x, l(100), r19.x - ld_raw r19.x, l(104), g0.xxxx - ld_raw r19.z, l(104), g1.xxxx - iadd r19.x, -r19.x, r19.z - store_raw g1.x, l(104), r19.x - endif - ld_raw r19.x, l(112), g0.xxxx - ld_raw r19.z, l(8), g1.xxxx - mul r19.x, r19.z, r19.x - lt r19.x, r19.x, r19.y - if_nz r19.x - store_raw g1.x, l(100), l(0) - endif - endif - iadd r17.x, r17.x, l(1) - endloop - sync_g_t -endif -if_z vThreadIDInGroup.x - ld_raw r0.xyzw, l(0), g1.xyzw - ld_raw r1.xyzw, l(16), g1.xyzw - ld_raw r2.xyzw, l(32), g1.xyzw - ld_raw r3.xyzw, l(48), g1.xyzw - ld_raw r4.xyzw, l(64), g1.xyzw - ld_raw r5.xyzw, l(80), g1.xyzw - ld_raw r6.xyzw, l(96), g1.xyzw - ld_raw r7.xy, l(112), g1.xyxx - store_structured u3.xyzw, vThreadGroupID.x, l(0), r0.xyzw - store_structured u3.xyzw, vThreadGroupID.x, l(16), r1.xyzw - store_structured u3.xyzw, vThreadGroupID.x, l(32), r2.xyzw - store_structured u3.xyzw, vThreadGroupID.x, l(48), r3.xyzw - store_structured u3.xyzw, vThreadGroupID.x, l(64), r4.xyzw - store_structured u3.xyzw, vThreadGroupID.x, l(80), r5.xyzw - store_structured u3.xyzw, vThreadGroupID.x, l(96), r6.xyzw - store_structured u3.xy, vThreadGroupID.x, l(112), r7.xyxx -endif -ret -// Approximately 4204 instruction slots used -#endif - -const BYTE gDxSolverKernel[] = -{ - 68, 88, 66, 67, 15, 26, - 236, 198, 241, 164, 237, 240, - 132, 194, 14, 81, 193, 73, - 162, 40, 1, 0, 0, 0, - 32, 212, 1, 0, 5, 0, - 0, 0, 52, 0, 0, 0, - 108, 20, 0, 0, 124, 20, - 0, 0, 140, 20, 0, 0, - 132, 211, 1, 0, 82, 68, - 69, 70, 48, 20, 0, 0, - 20, 0, 0, 0, 20, 4, - 0, 0, 20, 0, 0, 0, - 60, 0, 0, 0, 0, 5, - 83, 67, 0, 1, 0, 0, - 252, 19, 0, 0, 82, 68, - 49, 49, 60, 0, 0, 0, - 24, 0, 0, 0, 32, 0, - 0, 0, 40, 0, 0, 0, - 36, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, - 188, 2, 0, 0, 5, 0, - 0, 0, 6, 0, 0, 0, - 1, 0, 0, 0, 116, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 199, 2, 0, 0, - 5, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 100, 0, 0, 0, 2, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 209, 2, - 0, 0, 5, 0, 0, 0, - 6, 0, 0, 0, 1, 0, - 0, 0, 24, 0, 0, 0, - 3, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 223, 2, 0, 0, 5, 0, - 0, 0, 6, 0, 0, 0, - 1, 0, 0, 0, 8, 0, - 0, 0, 4, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 236, 2, 0, 0, - 5, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 5, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 255, 2, - 0, 0, 5, 0, 0, 0, - 6, 0, 0, 0, 1, 0, - 0, 0, 8, 0, 0, 0, - 6, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 15, 3, 0, 0, 5, 0, - 0, 0, 6, 0, 0, 0, - 1, 0, 0, 0, 16, 0, - 0, 0, 7, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 33, 3, 0, 0, - 5, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 8, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 46, 3, - 0, 0, 5, 0, 0, 0, - 6, 0, 0, 0, 1, 0, - 0, 0, 16, 0, 0, 0, - 9, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 63, 3, 0, 0, 5, 0, - 0, 0, 6, 0, 0, 0, - 1, 0, 0, 0, 12, 0, - 0, 0, 10, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 83, 3, 0, 0, - 5, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 16, 0, 0, 0, 11, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 102, 3, - 0, 0, 5, 0, 0, 0, - 6, 0, 0, 0, 1, 0, - 0, 0, 16, 0, 0, 0, - 12, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 125, 3, 0, 0, 5, 0, - 0, 0, 6, 0, 0, 0, - 1, 0, 0, 0, 16, 0, - 0, 0, 13, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 148, 3, 0, 0, - 5, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 16, 0, 0, 0, 14, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 163, 3, - 0, 0, 5, 0, 0, 0, - 6, 0, 0, 0, 1, 0, - 0, 0, 4, 0, 0, 0, - 15, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 185, 3, 0, 0, 5, 0, - 0, 0, 6, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 16, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 209, 3, 0, 0, - 6, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 220, 3, - 0, 0, 6, 0, 0, 0, - 6, 0, 0, 0, 1, 0, - 0, 0, 16, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 244, 3, 0, 0, 6, 0, - 0, 0, 6, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 2, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 7, 4, 0, 0, - 6, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 120, 0, 0, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 98, 67, - 108, 111, 116, 104, 68, 97, - 116, 97, 0, 98, 73, 116, - 101, 114, 68, 97, 116, 97, - 0, 98, 80, 104, 97, 115, - 101, 67, 111, 110, 102, 105, - 103, 115, 0, 98, 67, 111, - 110, 115, 116, 114, 97, 105, - 110, 116, 115, 0, 98, 84, - 101, 116, 104, 101, 114, 67, - 111, 110, 115, 116, 114, 97, - 105, 110, 116, 115, 0, 98, - 67, 97, 112, 115, 117, 108, - 101, 73, 110, 100, 105, 99, - 101, 115, 0, 98, 67, 111, - 108, 108, 105, 115, 105, 111, - 110, 83, 112, 104, 101, 114, - 101, 115, 0, 98, 67, 111, - 110, 118, 101, 120, 77, 97, - 115, 107, 115, 0, 98, 67, - 111, 108, 108, 105, 115, 105, - 111, 110, 80, 108, 97, 110, - 101, 115, 0, 98, 67, 111, - 108, 108, 105, 115, 105, 111, - 110, 84, 114, 105, 97, 110, - 103, 108, 101, 115, 0, 98, - 77, 111, 116, 105, 111, 110, - 67, 111, 110, 115, 116, 114, - 97, 105, 110, 116, 115, 0, - 98, 83, 101, 112, 97, 114, - 97, 116, 105, 111, 110, 67, - 111, 110, 115, 116, 114, 97, - 105, 110, 116, 115, 0, 98, - 80, 97, 114, 116, 105, 99, - 108, 101, 65, 99, 99, 101, - 108, 101, 114, 97, 116, 105, - 111, 110, 115, 0, 98, 82, - 101, 115, 116, 80, 111, 115, - 105, 116, 105, 111, 110, 115, - 0, 98, 83, 101, 108, 102, - 67, 111, 108, 108, 105, 115, - 105, 111, 110, 73, 110, 100, - 105, 99, 101, 115, 0, 98, - 80, 101, 114, 67, 111, 110, - 115, 116, 114, 97, 105, 110, - 116, 83, 116, 105, 102, 102, - 110, 101, 115, 115, 0, 98, - 80, 97, 114, 116, 105, 99, - 108, 101, 115, 0, 98, 83, - 101, 108, 102, 67, 111, 108, - 108, 105, 115, 105, 111, 110, - 80, 97, 114, 116, 105, 99, - 108, 101, 115, 0, 98, 83, - 101, 108, 102, 67, 111, 108, - 108, 105, 115, 105, 111, 110, - 68, 97, 116, 97, 0, 98, - 70, 114, 97, 109, 101, 68, - 97, 116, 97, 0, 171, 171, - 188, 2, 0, 0, 1, 0, - 0, 0, 244, 5, 0, 0, - 116, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 199, 2, 0, 0, 1, 0, - 0, 0, 40, 10, 0, 0, - 100, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 209, 2, 0, 0, 1, 0, - 0, 0, 224, 10, 0, 0, - 24, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 223, 2, 0, 0, 1, 0, - 0, 0, 228, 11, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 236, 2, 0, 0, 1, 0, - 0, 0, 108, 12, 0, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 255, 2, 0, 0, 1, 0, - 0, 0, 212, 12, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 15, 3, 0, 0, 1, 0, - 0, 0, 80, 13, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 33, 3, 0, 0, 1, 0, - 0, 0, 164, 13, 0, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 46, 3, 0, 0, 1, 0, - 0, 0, 204, 13, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 63, 3, 0, 0, 1, 0, - 0, 0, 244, 13, 0, 0, - 12, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 83, 3, 0, 0, 1, 0, - 0, 0, 72, 14, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 102, 3, 0, 0, 1, 0, - 0, 0, 112, 14, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 125, 3, 0, 0, 1, 0, - 0, 0, 152, 14, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 148, 3, 0, 0, 1, 0, - 0, 0, 192, 14, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 163, 3, 0, 0, 1, 0, - 0, 0, 232, 14, 0, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 185, 3, 0, 0, 1, 0, - 0, 0, 60, 15, 0, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 209, 3, 0, 0, 1, 0, - 0, 0, 100, 15, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 220, 3, 0, 0, 1, 0, - 0, 0, 140, 15, 0, 0, - 16, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 244, 3, 0, 0, 1, 0, - 0, 0, 180, 15, 0, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 7, 4, 0, 0, 1, 0, - 0, 0, 220, 15, 0, 0, - 120, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 28, 6, 0, 0, 0, 0, - 0, 0, 116, 0, 0, 0, - 2, 0, 0, 0, 4, 10, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 36, 69, - 108, 101, 109, 101, 110, 116, - 0, 68, 120, 67, 108, 111, - 116, 104, 68, 97, 116, 97, - 0, 109, 78, 117, 109, 80, - 97, 114, 116, 105, 99, 108, - 101, 115, 0, 117, 105, 110, - 116, 51, 50, 95, 116, 0, - 0, 0, 19, 0, 1, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 63, 6, 0, 0, - 109, 80, 97, 114, 116, 105, - 99, 108, 101, 115, 79, 102, - 102, 115, 101, 116, 0, 109, - 78, 117, 109, 80, 104, 97, - 115, 101, 115, 0, 109, 80, - 104, 97, 115, 101, 67, 111, - 110, 102, 105, 103, 79, 102, - 102, 115, 101, 116, 0, 109, - 67, 111, 110, 115, 116, 114, - 97, 105, 110, 116, 79, 102, - 102, 115, 101, 116, 0, 109, - 83, 116, 105, 102, 102, 110, - 101, 115, 115, 79, 102, 102, - 115, 101, 116, 0, 109, 78, - 117, 109, 84, 101, 116, 104, - 101, 114, 115, 0, 109, 84, - 101, 116, 104, 101, 114, 79, - 102, 102, 115, 101, 116, 0, - 109, 84, 101, 116, 104, 101, - 114, 67, 111, 110, 115, 116, - 114, 97, 105, 110, 116, 83, - 99, 97, 108, 101, 0, 102, - 108, 111, 97, 116, 0, 171, - 171, 171, 0, 0, 3, 0, - 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 6, - 0, 0, 109, 77, 111, 116, - 105, 111, 110, 67, 111, 110, - 115, 116, 114, 97, 105, 110, - 116, 83, 99, 97, 108, 101, - 0, 109, 77, 111, 116, 105, - 111, 110, 67, 111, 110, 115, - 116, 114, 97, 105, 110, 116, - 66, 105, 97, 115, 0, 109, - 78, 117, 109, 67, 97, 112, - 115, 117, 108, 101, 115, 0, - 109, 67, 97, 112, 115, 117, - 108, 101, 79, 102, 102, 115, - 101, 116, 0, 109, 78, 117, - 109, 83, 112, 104, 101, 114, - 101, 115, 0, 109, 78, 117, - 109, 80, 108, 97, 110, 101, - 115, 0, 109, 78, 117, 109, - 67, 111, 110, 118, 101, 120, - 101, 115, 0, 109, 67, 111, - 110, 118, 101, 120, 77, 97, - 115, 107, 115, 79, 102, 102, - 115, 101, 116, 0, 109, 78, - 117, 109, 67, 111, 108, 108, - 105, 115, 105, 111, 110, 84, - 114, 105, 97, 110, 103, 108, - 101, 115, 0, 109, 69, 110, - 97, 98, 108, 101, 67, 111, - 110, 116, 105, 110, 117, 111, - 117, 115, 67, 111, 108, 108, - 105, 115, 105, 111, 110, 0, - 109, 67, 111, 108, 108, 105, - 115, 105, 111, 110, 77, 97, - 115, 115, 83, 99, 97, 108, - 101, 0, 109, 70, 114, 105, - 99, 116, 105, 111, 110, 83, - 99, 97, 108, 101, 0, 109, - 83, 101, 108, 102, 67, 111, - 108, 108, 105, 115, 105, 111, - 110, 68, 105, 115, 116, 97, - 110, 99, 101, 0, 109, 78, - 117, 109, 83, 101, 108, 102, - 67, 111, 108, 108, 105, 115, - 105, 111, 110, 73, 110, 100, - 105, 99, 101, 115, 0, 109, - 83, 101, 108, 102, 67, 111, - 108, 108, 105, 115, 105, 111, - 110, 73, 110, 100, 105, 99, - 101, 115, 79, 102, 102, 115, - 101, 116, 0, 109, 83, 101, - 108, 102, 67, 111, 108, 108, - 105, 115, 105, 111, 110, 80, - 97, 114, 116, 105, 99, 108, - 101, 115, 79, 102, 102, 115, - 101, 116, 0, 109, 83, 101, - 108, 102, 67, 111, 108, 108, - 105, 115, 105, 111, 110, 68, - 97, 116, 97, 79, 102, 102, - 115, 101, 116, 0, 109, 83, - 108, 101, 101, 112, 84, 101, - 115, 116, 73, 110, 116, 101, - 114, 118, 97, 108, 0, 109, - 83, 108, 101, 101, 112, 65, - 102, 116, 101, 114, 67, 111, - 117, 110, 116, 0, 109, 83, - 108, 101, 101, 112, 84, 104, - 114, 101, 115, 104, 111, 108, - 100, 0, 49, 6, 0, 0, - 72, 6, 0, 0, 0, 0, - 0, 0, 108, 6, 0, 0, - 72, 6, 0, 0, 4, 0, - 0, 0, 125, 6, 0, 0, - 72, 6, 0, 0, 8, 0, - 0, 0, 136, 6, 0, 0, - 72, 6, 0, 0, 12, 0, - 0, 0, 155, 6, 0, 0, - 72, 6, 0, 0, 16, 0, - 0, 0, 173, 6, 0, 0, - 72, 6, 0, 0, 20, 0, - 0, 0, 190, 6, 0, 0, - 72, 6, 0, 0, 24, 0, - 0, 0, 202, 6, 0, 0, - 72, 6, 0, 0, 28, 0, - 0, 0, 216, 6, 0, 0, - 248, 6, 0, 0, 32, 0, - 0, 0, 28, 7, 0, 0, - 248, 6, 0, 0, 36, 0, - 0, 0, 51, 7, 0, 0, - 248, 6, 0, 0, 40, 0, - 0, 0, 73, 7, 0, 0, - 72, 6, 0, 0, 44, 0, - 0, 0, 86, 7, 0, 0, - 72, 6, 0, 0, 48, 0, - 0, 0, 101, 7, 0, 0, - 72, 6, 0, 0, 52, 0, - 0, 0, 113, 7, 0, 0, - 72, 6, 0, 0, 56, 0, - 0, 0, 124, 7, 0, 0, - 72, 6, 0, 0, 60, 0, - 0, 0, 137, 7, 0, 0, - 72, 6, 0, 0, 64, 0, - 0, 0, 156, 7, 0, 0, - 72, 6, 0, 0, 68, 0, - 0, 0, 179, 7, 0, 0, - 72, 6, 0, 0, 72, 0, - 0, 0, 206, 7, 0, 0, - 248, 6, 0, 0, 76, 0, - 0, 0, 226, 7, 0, 0, - 248, 6, 0, 0, 80, 0, - 0, 0, 241, 7, 0, 0, - 248, 6, 0, 0, 84, 0, - 0, 0, 8, 8, 0, 0, - 72, 6, 0, 0, 88, 0, - 0, 0, 33, 8, 0, 0, - 72, 6, 0, 0, 92, 0, - 0, 0, 61, 8, 0, 0, - 72, 6, 0, 0, 96, 0, - 0, 0, 91, 8, 0, 0, - 72, 6, 0, 0, 100, 0, - 0, 0, 116, 8, 0, 0, - 72, 6, 0, 0, 104, 0, - 0, 0, 135, 8, 0, 0, - 72, 6, 0, 0, 108, 0, - 0, 0, 152, 8, 0, 0, - 248, 6, 0, 0, 112, 0, - 0, 0, 5, 0, 0, 0, - 1, 0, 29, 0, 0, 0, - 29, 0, 168, 8, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 37, 6, - 0, 0, 28, 6, 0, 0, - 0, 0, 0, 0, 100, 0, - 0, 0, 2, 0, 0, 0, - 188, 10, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 68, 120, 73, 116, 101, 114, - 97, 116, 105, 111, 110, 68, - 97, 116, 97, 0, 109, 73, - 110, 116, 101, 103, 114, 97, - 116, 105, 111, 110, 84, 114, - 97, 102, 111, 0, 171, 171, - 0, 0, 3, 0, 1, 0, - 1, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 239, 6, 0, 0, - 109, 73, 115, 84, 117, 114, - 110, 105, 110, 103, 0, 171, - 96, 10, 0, 0, 116, 10, - 0, 0, 0, 0, 0, 0, - 152, 10, 0, 0, 72, 6, - 0, 0, 96, 0, 0, 0, - 5, 0, 0, 0, 1, 0, - 25, 0, 0, 0, 2, 0, - 164, 10, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 80, 10, 0, 0, - 28, 6, 0, 0, 0, 0, - 0, 0, 24, 0, 0, 0, - 2, 0, 0, 0, 192, 11, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 68, 120, - 80, 104, 97, 115, 101, 67, - 111, 110, 102, 105, 103, 0, - 109, 83, 116, 105, 102, 102, - 110, 101, 115, 115, 0, 109, - 83, 116, 105, 102, 102, 110, - 101, 115, 115, 77, 117, 108, - 116, 105, 112, 108, 105, 101, - 114, 0, 109, 67, 111, 109, - 112, 114, 101, 115, 115, 105, - 111, 110, 76, 105, 109, 105, - 116, 0, 109, 83, 116, 114, - 101, 116, 99, 104, 76, 105, - 109, 105, 116, 0, 109, 70, - 105, 114, 115, 116, 67, 111, - 110, 115, 116, 114, 97, 105, - 110, 116, 0, 109, 78, 117, - 109, 67, 111, 110, 115, 116, - 114, 97, 105, 110, 116, 115, - 0, 171, 22, 11, 0, 0, - 248, 6, 0, 0, 0, 0, - 0, 0, 33, 11, 0, 0, - 248, 6, 0, 0, 4, 0, - 0, 0, 54, 11, 0, 0, - 248, 6, 0, 0, 8, 0, - 0, 0, 72, 11, 0, 0, - 248, 6, 0, 0, 12, 0, - 0, 0, 86, 11, 0, 0, - 72, 6, 0, 0, 16, 0, - 0, 0, 103, 11, 0, 0, - 72, 6, 0, 0, 20, 0, - 0, 0, 5, 0, 0, 0, - 1, 0, 6, 0, 0, 0, - 6, 0, 120, 11, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 11, - 0, 0, 28, 6, 0, 0, - 0, 0, 0, 0, 8, 0, - 0, 0, 2, 0, 0, 0, - 72, 12, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 68, 120, 67, 111, 110, 115, - 116, 114, 97, 105, 110, 116, - 0, 109, 82, 101, 115, 116, - 118, 97, 108, 117, 101, 0, - 109, 73, 110, 100, 105, 99, - 101, 115, 0, 171, 171, 171, - 25, 12, 0, 0, 248, 6, - 0, 0, 0, 0, 0, 0, - 36, 12, 0, 0, 72, 6, - 0, 0, 4, 0, 0, 0, - 5, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 2, 0, - 48, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 12, 12, 0, 0, - 28, 6, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 2, 0, 0, 0, 176, 12, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 68, 120, - 84, 101, 116, 104, 101, 114, - 0, 109, 86, 97, 108, 117, - 101, 0, 157, 12, 0, 0, - 72, 6, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, - 1, 0, 1, 0, 0, 0, - 1, 0, 164, 12, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 148, 12, - 0, 0, 28, 6, 0, 0, - 0, 0, 0, 0, 8, 0, - 0, 0, 2, 0, 0, 0, - 44, 13, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 73, 110, 100, 101, 120, 80, - 97, 105, 114, 0, 102, 105, - 114, 115, 116, 0, 115, 101, - 99, 111, 110, 100, 0, 171, - 6, 13, 0, 0, 72, 6, - 0, 0, 0, 0, 0, 0, - 12, 13, 0, 0, 72, 6, - 0, 0, 4, 0, 0, 0, - 5, 0, 0, 0, 1, 0, - 2, 0, 0, 0, 2, 0, - 20, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 252, 12, 0, 0, - 28, 6, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, - 2, 0, 0, 0, 128, 13, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 102, 108, - 111, 97, 116, 52, 0, 171, - 1, 0, 3, 0, 1, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 120, 13, 0, 0, - 28, 6, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 2, 0, 0, 0, 72, 6, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 28, 6, - 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 2, 0, - 0, 0, 128, 13, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 28, 6, 0, 0, - 0, 0, 0, 0, 12, 0, - 0, 0, 2, 0, 0, 0, - 36, 14, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 102, 108, 111, 97, 116, 51, - 0, 171, 1, 0, 3, 0, - 1, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 28, 14, - 0, 0, 28, 6, 0, 0, - 0, 0, 0, 0, 16, 0, - 0, 0, 2, 0, 0, 0, - 128, 13, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 28, 6, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, - 2, 0, 0, 0, 128, 13, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 28, 6, - 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 2, 0, - 0, 0, 128, 13, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 28, 6, 0, 0, - 0, 0, 0, 0, 16, 0, - 0, 0, 2, 0, 0, 0, - 128, 13, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 28, 6, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 2, 0, 0, 0, 24, 15, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 105, 110, - 116, 51, 50, 95, 116, 0, - 0, 0, 2, 0, 1, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 16, 15, 0, 0, - 28, 6, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 2, 0, 0, 0, 248, 6, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 28, 6, - 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 2, 0, - 0, 0, 128, 13, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 28, 6, 0, 0, - 0, 0, 0, 0, 16, 0, - 0, 0, 2, 0, 0, 0, - 128, 13, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 28, 6, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 2, 0, 0, 0, 72, 6, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 28, 6, - 0, 0, 0, 0, 0, 0, - 120, 0, 0, 0, 2, 0, - 0, 0, 216, 19, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 68, 120, 70, 114, - 97, 109, 101, 68, 97, 116, - 97, 0, 109, 68, 101, 118, - 105, 99, 101, 80, 97, 114, - 116, 105, 99, 108, 101, 115, - 68, 105, 114, 116, 121, 0, - 98, 111, 111, 108, 0, 171, - 0, 0, 1, 0, 1, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 38, 16, 0, 0, - 109, 78, 117, 109, 83, 104, - 97, 114, 101, 100, 80, 111, - 115, 105, 116, 105, 111, 110, - 115, 0, 109, 73, 116, 101, - 114, 68, 116, 0, 109, 70, - 105, 114, 115, 116, 73, 116, - 101, 114, 97, 116, 105, 111, - 110, 0, 109, 78, 117, 109, - 73, 116, 101, 114, 97, 116, - 105, 111, 110, 115, 0, 109, - 84, 101, 116, 104, 101, 114, - 67, 111, 110, 115, 116, 114, - 97, 105, 110, 116, 83, 116, - 105, 102, 102, 110, 101, 115, - 115, 0, 109, 77, 111, 116, - 105, 111, 110, 67, 111, 110, - 115, 116, 114, 97, 105, 110, - 116, 83, 116, 105, 102, 102, - 110, 101, 115, 115, 0, 109, - 83, 116, 97, 114, 116, 77, - 111, 116, 105, 111, 110, 67, - 111, 110, 115, 116, 114, 97, - 105, 110, 115, 79, 102, 102, - 115, 101, 116, 0, 109, 84, - 97, 114, 103, 101, 116, 77, - 111, 116, 105, 111, 110, 67, - 111, 110, 115, 116, 114, 97, - 105, 110, 115, 79, 102, 102, - 115, 101, 116, 0, 109, 83, - 116, 97, 114, 116, 83, 101, - 112, 97, 114, 97, 116, 105, - 111, 110, 67, 111, 110, 115, - 116, 114, 97, 105, 110, 115, - 79, 102, 102, 115, 101, 116, - 0, 109, 84, 97, 114, 103, - 101, 116, 83, 101, 112, 97, - 114, 97, 116, 105, 111, 110, - 67, 111, 110, 115, 116, 114, - 97, 105, 110, 115, 79, 102, - 102, 115, 101, 116, 0, 109, - 80, 97, 114, 116, 105, 99, - 108, 101, 65, 99, 99, 101, - 108, 101, 114, 97, 116, 105, - 111, 110, 115, 79, 102, 102, - 115, 101, 116, 0, 109, 83, - 116, 97, 114, 116, 83, 112, - 104, 101, 114, 101, 79, 102, - 102, 115, 101, 116, 0, 109, - 84, 97, 114, 103, 101, 116, - 83, 112, 104, 101, 114, 101, - 79, 102, 102, 115, 101, 116, - 0, 109, 83, 116, 97, 114, - 116, 67, 111, 108, 108, 105, - 115, 105, 111, 110, 80, 108, - 97, 110, 101, 79, 102, 102, - 115, 101, 116, 0, 109, 84, - 97, 114, 103, 101, 116, 67, - 111, 108, 108, 105, 115, 105, - 111, 110, 80, 108, 97, 110, - 101, 79, 102, 102, 115, 101, - 116, 0, 109, 83, 116, 97, - 114, 116, 67, 111, 108, 108, - 105, 115, 105, 111, 110, 84, - 114, 105, 97, 110, 103, 108, - 101, 115, 79, 102, 102, 115, - 101, 116, 0, 109, 84, 97, - 114, 103, 101, 116, 67, 111, - 108, 108, 105, 115, 105, 111, - 110, 84, 114, 105, 97, 110, - 103, 108, 101, 115, 79, 102, - 102, 115, 101, 116, 0, 109, - 83, 101, 108, 102, 67, 111, - 108, 108, 105, 115, 105, 111, - 110, 83, 116, 105, 102, 102, - 110, 101, 115, 115, 0, 109, - 80, 97, 114, 116, 105, 99, - 108, 101, 66, 111, 117, 110, - 100, 115, 0, 171, 171, 171, - 0, 0, 3, 0, 1, 0, - 1, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 239, 6, 0, 0, - 109, 83, 108, 101, 101, 112, - 80, 97, 115, 115, 67, 111, - 117, 110, 116, 101, 114, 0, - 109, 83, 108, 101, 101, 112, - 84, 101, 115, 116, 67, 111, - 117, 110, 116, 101, 114, 0, - 109, 83, 116, 105, 102, 102, - 110, 101, 115, 115, 69, 120, - 112, 111, 110, 101, 110, 116, - 0, 109, 82, 101, 115, 116, - 80, 111, 115, 105, 116, 105, - 111, 110, 115, 79, 102, 102, - 115, 101, 116, 0, 109, 73, - 110, 105, 116, 83, 101, 108, - 102, 67, 111, 108, 108, 105, - 115, 105, 111, 110, 68, 97, - 116, 97, 0, 171, 16, 16, - 0, 0, 44, 16, 0, 0, - 0, 0, 0, 0, 80, 16, - 0, 0, 72, 6, 0, 0, - 4, 0, 0, 0, 100, 16, - 0, 0, 248, 6, 0, 0, - 8, 0, 0, 0, 108, 16, - 0, 0, 72, 6, 0, 0, - 12, 0, 0, 0, 124, 16, - 0, 0, 72, 6, 0, 0, - 16, 0, 0, 0, 139, 16, - 0, 0, 248, 6, 0, 0, - 20, 0, 0, 0, 166, 16, - 0, 0, 248, 6, 0, 0, - 24, 0, 0, 0, 193, 16, - 0, 0, 72, 6, 0, 0, - 28, 0, 0, 0, 222, 16, - 0, 0, 72, 6, 0, 0, - 32, 0, 0, 0, 252, 16, - 0, 0, 72, 6, 0, 0, - 36, 0, 0, 0, 29, 17, - 0, 0, 72, 6, 0, 0, - 40, 0, 0, 0, 63, 17, - 0, 0, 72, 6, 0, 0, - 44, 0, 0, 0, 92, 17, - 0, 0, 72, 6, 0, 0, - 48, 0, 0, 0, 111, 17, - 0, 0, 72, 6, 0, 0, - 52, 0, 0, 0, 131, 17, - 0, 0, 72, 6, 0, 0, - 56, 0, 0, 0, 158, 17, - 0, 0, 72, 6, 0, 0, - 60, 0, 0, 0, 186, 17, - 0, 0, 72, 6, 0, 0, - 64, 0, 0, 0, 217, 17, - 0, 0, 72, 6, 0, 0, - 68, 0, 0, 0, 249, 17, - 0, 0, 248, 6, 0, 0, - 72, 0, 0, 0, 17, 18, - 0, 0, 36, 18, 0, 0, - 76, 0, 0, 0, 72, 18, - 0, 0, 72, 6, 0, 0, - 100, 0, 0, 0, 90, 18, - 0, 0, 72, 6, 0, 0, - 104, 0, 0, 0, 108, 18, - 0, 0, 248, 6, 0, 0, - 108, 0, 0, 0, 127, 18, - 0, 0, 72, 6, 0, 0, - 112, 0, 0, 0, 148, 18, - 0, 0, 44, 16, 0, 0, - 116, 0, 0, 0, 5, 0, - 0, 0, 1, 0, 30, 0, - 0, 0, 25, 0, 172, 18, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 4, 16, 0, 0, 77, 105, - 99, 114, 111, 115, 111, 102, - 116, 32, 40, 82, 41, 32, - 72, 76, 83, 76, 32, 83, - 104, 97, 100, 101, 114, 32, - 67, 111, 109, 112, 105, 108, - 101, 114, 32, 54, 46, 51, - 46, 57, 54, 48, 48, 46, - 49, 54, 51, 56, 52, 0, - 171, 171, 73, 83, 71, 78, - 8, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, - 79, 83, 71, 78, 8, 0, - 0, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 83, 72, - 69, 88, 240, 190, 1, 0, - 80, 0, 5, 0, 188, 111, - 0, 0, 106, 8, 0, 1, - 53, 24, 0, 0, 18, 0, - 0, 0, 0, 0, 128, 63, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 128, 63, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 128, 63, - 162, 0, 0, 4, 0, 112, - 16, 0, 0, 0, 0, 0, - 116, 0, 0, 0, 162, 0, - 0, 4, 0, 112, 16, 0, - 2, 0, 0, 0, 100, 0, - 0, 0, 162, 0, 0, 4, - 0, 112, 16, 0, 3, 0, - 0, 0, 24, 0, 0, 0, - 162, 0, 0, 4, 0, 112, - 16, 0, 4, 0, 0, 0, - 8, 0, 0, 0, 162, 0, - 0, 4, 0, 112, 16, 0, - 5, 0, 0, 0, 4, 0, - 0, 0, 162, 0, 0, 4, - 0, 112, 16, 0, 6, 0, - 0, 0, 8, 0, 0, 0, - 162, 0, 0, 4, 0, 112, - 16, 0, 7, 0, 0, 0, - 16, 0, 0, 0, 162, 0, - 0, 4, 0, 112, 16, 0, - 8, 0, 0, 0, 4, 0, - 0, 0, 162, 0, 0, 4, - 0, 112, 16, 0, 9, 0, - 0, 0, 16, 0, 0, 0, - 162, 0, 0, 4, 0, 112, - 16, 0, 10, 0, 0, 0, - 12, 0, 0, 0, 162, 0, - 0, 4, 0, 112, 16, 0, - 11, 0, 0, 0, 16, 0, - 0, 0, 162, 0, 0, 4, - 0, 112, 16, 0, 12, 0, - 0, 0, 16, 0, 0, 0, - 162, 0, 0, 4, 0, 112, - 16, 0, 13, 0, 0, 0, - 16, 0, 0, 0, 162, 0, - 0, 4, 0, 112, 16, 0, - 14, 0, 0, 0, 16, 0, - 0, 0, 162, 0, 0, 4, - 0, 112, 16, 0, 15, 0, - 0, 0, 4, 0, 0, 0, - 162, 0, 0, 4, 0, 112, - 16, 0, 16, 0, 0, 0, - 4, 0, 0, 0, 158, 0, - 0, 4, 0, 224, 17, 0, - 0, 0, 0, 0, 16, 0, - 0, 0, 158, 0, 0, 4, - 0, 224, 17, 0, 1, 0, - 0, 0, 16, 0, 0, 0, - 158, 0, 0, 4, 0, 224, - 17, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 158, 0, - 0, 4, 0, 224, 17, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 95, 0, 0, 2, - 18, 16, 2, 0, 95, 0, - 0, 2, 18, 32, 2, 0, - 104, 0, 0, 2, 48, 0, - 0, 0, 159, 0, 0, 4, - 0, 240, 17, 0, 0, 0, - 0, 0, 116, 0, 0, 0, - 159, 0, 0, 4, 0, 240, - 17, 0, 1, 0, 0, 0, - 120, 0, 0, 0, 159, 0, - 0, 4, 0, 240, 17, 0, - 2, 0, 0, 0, 100, 0, - 0, 0, 160, 0, 0, 5, - 0, 240, 17, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 220, 30, 0, 0, 160, 0, - 0, 5, 0, 240, 17, 0, - 4, 0, 0, 0, 4, 0, - 0, 0, 192, 0, 0, 0, - 159, 0, 0, 4, 0, 240, - 17, 0, 5, 0, 0, 0, - 36, 0, 0, 0, 160, 0, - 0, 5, 0, 240, 17, 0, - 6, 0, 0, 0, 4, 0, - 0, 0, 3, 0, 0, 0, - 155, 0, 0, 4, 0, 4, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 31, 0, - 0, 2, 10, 32, 2, 0, - 167, 0, 0, 138, 2, 163, - 3, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 0, 0, - 0, 0, 10, 16, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 0, 0, 0, 0, 167, 0, - 0, 138, 2, 163, 3, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 1, 0, 0, 0, - 10, 16, 2, 0, 1, 64, - 0, 0, 16, 0, 0, 0, - 70, 126, 16, 0, 0, 0, - 0, 0, 167, 0, 0, 138, - 2, 163, 3, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 2, 0, 0, 0, 10, 16, - 2, 0, 1, 64, 0, 0, - 32, 0, 0, 0, 70, 126, - 16, 0, 0, 0, 0, 0, - 167, 0, 0, 138, 2, 163, - 3, 128, 131, 153, 25, 0, - 50, 0, 16, 0, 3, 0, - 0, 0, 10, 16, 2, 0, - 1, 64, 0, 0, 48, 0, - 0, 0, 70, 112, 16, 0, - 0, 0, 0, 0, 167, 0, - 0, 138, 2, 163, 3, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 4, 0, 0, 0, - 10, 16, 2, 0, 1, 64, - 0, 0, 60, 0, 0, 0, - 70, 126, 16, 0, 0, 0, - 0, 0, 167, 0, 0, 138, - 2, 163, 3, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 5, 0, 0, 0, 10, 16, - 2, 0, 1, 64, 0, 0, - 76, 0, 0, 0, 70, 126, - 16, 0, 0, 0, 0, 0, - 167, 0, 0, 138, 2, 163, - 3, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 6, 0, - 0, 0, 10, 16, 2, 0, - 1, 64, 0, 0, 92, 0, - 0, 0, 70, 126, 16, 0, - 0, 0, 0, 0, 167, 0, - 0, 138, 2, 163, 3, 128, - 131, 153, 25, 0, 66, 0, - 16, 0, 3, 0, 0, 0, - 10, 16, 2, 0, 1, 64, - 0, 0, 112, 0, 0, 0, - 6, 112, 16, 0, 0, 0, - 0, 0, 166, 0, 0, 7, - 242, 240, 17, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 0, 0, 0, 0, - 166, 0, 0, 7, 242, 240, - 17, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 16, 0, - 0, 0, 70, 14, 16, 0, - 1, 0, 0, 0, 166, 0, - 0, 7, 242, 240, 17, 0, - 0, 0, 0, 0, 1, 64, - 0, 0, 32, 0, 0, 0, - 70, 14, 16, 0, 2, 0, - 0, 0, 166, 0, 0, 7, - 50, 240, 17, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 48, 0, 0, 0, 70, 0, - 16, 0, 3, 0, 0, 0, - 166, 0, 0, 7, 242, 240, - 17, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 60, 0, - 0, 0, 70, 14, 16, 0, - 4, 0, 0, 0, 166, 0, - 0, 7, 242, 240, 17, 0, - 0, 0, 0, 0, 1, 64, - 0, 0, 76, 0, 0, 0, - 70, 14, 16, 0, 5, 0, - 0, 0, 166, 0, 0, 7, - 242, 240, 17, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 92, 0, 0, 0, 70, 14, - 16, 0, 6, 0, 0, 0, - 166, 0, 0, 7, 18, 240, - 17, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 112, 0, - 0, 0, 42, 0, 16, 0, - 3, 0, 0, 0, 167, 0, - 0, 138, 2, 195, 3, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 0, 0, 0, 0, - 10, 16, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 238, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 138, - 2, 195, 3, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 1, 0, 0, 0, 10, 16, - 2, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 70, 238, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 138, 2, 195, - 3, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 2, 0, - 0, 0, 10, 16, 2, 0, - 1, 64, 0, 0, 32, 0, - 0, 0, 70, 238, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 138, 2, 195, 3, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 3, 0, 0, 0, - 10, 16, 2, 0, 1, 64, - 0, 0, 48, 0, 0, 0, - 70, 238, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 138, - 2, 195, 3, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 4, 0, 0, 0, 10, 16, - 2, 0, 1, 64, 0, 0, - 64, 0, 0, 0, 70, 238, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 138, 2, 195, - 3, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 5, 0, - 0, 0, 10, 16, 2, 0, - 1, 64, 0, 0, 80, 0, - 0, 0, 70, 238, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 138, 2, 195, 3, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 6, 0, 0, 0, - 10, 16, 2, 0, 1, 64, - 0, 0, 96, 0, 0, 0, - 70, 238, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 138, - 2, 195, 3, 128, 131, 153, - 25, 0, 50, 0, 16, 0, - 7, 0, 0, 0, 10, 16, - 2, 0, 1, 64, 0, 0, - 112, 0, 0, 0, 70, 224, - 17, 0, 3, 0, 0, 0, - 166, 0, 0, 7, 242, 240, - 17, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 0, 0, 0, 0, 166, 0, - 0, 7, 242, 240, 17, 0, - 1, 0, 0, 0, 1, 64, - 0, 0, 16, 0, 0, 0, - 70, 14, 16, 0, 1, 0, - 0, 0, 166, 0, 0, 7, - 242, 240, 17, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 32, 0, 0, 0, 70, 14, - 16, 0, 2, 0, 0, 0, - 166, 0, 0, 7, 242, 240, - 17, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 48, 0, - 0, 0, 70, 14, 16, 0, - 3, 0, 0, 0, 166, 0, - 0, 7, 242, 240, 17, 0, - 1, 0, 0, 0, 1, 64, - 0, 0, 64, 0, 0, 0, - 70, 14, 16, 0, 4, 0, - 0, 0, 166, 0, 0, 7, - 242, 240, 17, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 80, 0, 0, 0, 70, 14, - 16, 0, 5, 0, 0, 0, - 166, 0, 0, 7, 242, 240, - 17, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 96, 0, - 0, 0, 70, 14, 16, 0, - 6, 0, 0, 0, 166, 0, - 0, 7, 50, 240, 17, 0, - 1, 0, 0, 0, 1, 64, - 0, 0, 112, 0, 0, 0, - 70, 0, 16, 0, 7, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 165, 0, - 0, 7, 50, 0, 16, 0, - 0, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 240, 17, 0, 0, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 80, 0, - 0, 7, 66, 0, 16, 0, - 0, 0, 0, 0, 1, 64, - 0, 0, 183, 7, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 31, 0, 4, 3, - 42, 0, 16, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 66, 0, 16, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 4, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 18, 0, - 16, 0, 1, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 130, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 1, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 1, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 2, 0, 0, 0, - 58, 0, 16, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 0, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 2, 0, 0, 0, - 30, 0, 0, 10, 242, 0, - 16, 0, 1, 0, 0, 0, - 6, 0, 16, 0, 1, 0, - 0, 0, 2, 64, 0, 0, - 0, 4, 0, 0, 183, 7, - 0, 0, 110, 15, 0, 0, - 37, 23, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 2, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 2, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 58, 0, - 16, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 2, 0, 0, 0, 22, 0, - 0, 1, 59, 0, 0, 4, - 34, 0, 16, 0, 0, 0, - 0, 0, 10, 32, 2, 0, - 1, 0, 0, 7, 34, 0, - 16, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 3, 0, 0, 0, 79, 0, - 0, 9, 242, 0, 16, 0, - 1, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 192, 0, 0, 0, 176, 0, - 0, 0, 3, 0, 0, 0, - 0, 2, 0, 0, 1, 0, - 0, 9, 242, 0, 16, 0, - 2, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 32, 0, 0, 0, 31, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 55, 0, - 0, 9, 66, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 2, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 191, 1, 64, 0, 0, - 0, 0, 128, 63, 30, 0, - 0, 9, 242, 0, 16, 0, - 3, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 16, 0, 0, 0, 8, 0, - 0, 0, 4, 0, 0, 0, - 2, 0, 0, 0, 32, 0, - 0, 7, 130, 0, 16, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 2, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 1, 0, 0, 0, - 85, 0, 0, 9, 50, 0, - 16, 0, 4, 0, 0, 0, - 6, 32, 2, 0, 2, 64, - 0, 0, 6, 0, 0, 0, - 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 41, 0, 0, 7, 18, 0, - 16, 0, 2, 0, 0, 0, - 26, 0, 16, 0, 4, 0, - 0, 0, 1, 64, 0, 0, - 2, 0, 0, 0, 41, 0, - 0, 6, 66, 0, 16, 0, - 4, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 4, 0, 0, 0, 42, 0, - 16, 0, 4, 0, 0, 0, - 1, 64, 0, 0, 76, 0, - 0, 0, 30, 0, 0, 10, - 82, 0, 16, 0, 2, 0, - 0, 0, 6, 2, 16, 0, - 2, 0, 0, 0, 2, 64, - 0, 0, 76, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 39, 0, 0, 7, 130, 0, - 16, 0, 2, 0, 0, 0, - 58, 0, 16, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 32, 0, - 0, 7, 130, 0, 16, 0, - 2, 0, 0, 0, 58, 0, - 16, 0, 2, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 9, - 114, 0, 16, 0, 5, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 4, 0, - 0, 0, 8, 0, 0, 0, - 224, 3, 0, 0, 0, 0, - 0, 0, 39, 0, 0, 10, - 50, 0, 16, 0, 5, 0, - 0, 0, 70, 0, 16, 0, - 5, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 32, 0, 0, 10, 50, 0, - 16, 0, 5, 0, 0, 0, - 70, 0, 16, 0, 5, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 9, 242, 0, 16, 0, - 6, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 1, 0, 0, 0, 16, 4, - 0, 0, 16, 12, 0, 0, - 8, 4, 0, 0, 79, 0, - 0, 10, 242, 0, 16, 0, - 7, 0, 0, 0, 86, 5, - 16, 0, 2, 0, 0, 0, - 2, 64, 0, 0, 16, 0, - 0, 0, 8, 0, 0, 0, - 4, 0, 0, 0, 2, 0, - 0, 0, 79, 0, 0, 7, - 130, 0, 16, 0, 4, 0, - 0, 0, 26, 0, 16, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 30, 0, 0, 9, 242, 0, - 16, 0, 8, 0, 0, 0, - 6, 32, 2, 0, 2, 64, - 0, 0, 8, 12, 0, 0, - 4, 4, 0, 0, 4, 12, - 0, 0, 2, 4, 0, 0, - 30, 0, 0, 10, 242, 0, - 16, 0, 9, 0, 0, 0, - 70, 14, 16, 0, 3, 0, - 0, 0, 2, 64, 0, 0, - 0, 8, 0, 0, 0, 8, - 0, 0, 0, 8, 0, 0, - 0, 8, 0, 0, 30, 0, - 0, 10, 114, 0, 16, 0, - 10, 0, 0, 0, 166, 10, - 16, 0, 5, 0, 0, 0, - 2, 64, 0, 0, 0, 4, - 0, 0, 0, 8, 0, 0, - 0, 12, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 10, - 50, 0, 16, 0, 11, 0, - 0, 0, 86, 5, 16, 0, - 4, 0, 0, 0, 2, 64, - 0, 0, 1, 0, 0, 0, - 1, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 140, 0, 0, 19, 242, 0, - 16, 0, 12, 0, 0, 0, - 2, 64, 0, 0, 10, 0, - 0, 0, 11, 0, 0, 0, - 10, 0, 0, 0, 5, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 0, 4, 0, 0, 0, 8, - 0, 0, 0, 12, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 82, 0, 16, 0, - 11, 0, 0, 0, 6, 1, - 16, 0, 11, 0, 0, 0, - 246, 15, 16, 0, 12, 0, - 0, 0, 30, 0, 0, 9, - 242, 0, 16, 0, 13, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 2, 12, - 0, 0, 1, 4, 0, 0, - 1, 12, 0, 0, 2, 2, - 0, 0, 30, 0, 0, 10, - 50, 0, 16, 0, 14, 0, - 0, 0, 6, 0, 16, 0, - 6, 0, 0, 0, 2, 64, - 0, 0, 0, 8, 0, 0, - 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 30, 0, 0, 6, 130, 0, - 16, 0, 5, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 16, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 10, 0, 0, 0, - 58, 0, 16, 0, 13, 0, - 0, 0, 1, 64, 0, 0, - 0, 16, 0, 0, 30, 0, - 0, 9, 242, 0, 16, 0, - 15, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 1, 16, 0, 0, 0, 2, - 0, 0, 2, 18, 0, 0, - 253, 15, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 11, 0, 0, 0, 26, 0, - 16, 0, 15, 0, 0, 0, - 1, 64, 0, 0, 0, 16, - 0, 0, 80, 0, 0, 9, - 242, 0, 16, 0, 16, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 8, 0, - 0, 0, 30, 0, 0, 9, - 242, 0, 16, 0, 17, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 250, 1, - 0, 0, 241, 15, 0, 0, - 226, 1, 0, 0, 193, 15, - 0, 0, 30, 0, 0, 10, - 194, 0, 16, 0, 14, 0, - 0, 0, 6, 8, 16, 0, - 17, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, - 0, 0, 0, 16, 0, 0, - 80, 0, 0, 9, 242, 0, - 16, 0, 18, 0, 0, 0, - 6, 32, 2, 0, 2, 64, - 0, 0, 16, 0, 0, 0, - 32, 0, 0, 0, 64, 0, - 0, 0, 128, 0, 0, 0, - 30, 0, 0, 9, 82, 0, - 16, 0, 17, 0, 0, 0, - 6, 32, 2, 0, 2, 64, - 0, 0, 130, 1, 0, 0, - 0, 0, 0, 0, 1, 15, - 0, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 12, 0, 0, 0, - 10, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 0, 16, 0, 0, 80, 0, - 0, 6, 130, 0, 16, 0, - 13, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 1, 0, 0, 30, 0, - 0, 10, 82, 0, 16, 0, - 11, 0, 0, 0, 6, 2, - 16, 0, 11, 0, 0, 0, - 2, 64, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 34, 0, 16, 0, 15, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 48, 0, - 0, 1, 165, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 80, 0, 0, 7, 18, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 15, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 3, 0, - 4, 3, 10, 0, 16, 0, - 19, 0, 0, 0, 86, 0, - 0, 5, 18, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 15, 0, 0, 0, - 0, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 86, 0, - 0, 5, 18, 0, 16, 0, - 17, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 14, 0, 0, 7, 18, 0, - 16, 0, 17, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 31, 0, - 0, 2, 10, 32, 2, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 12, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 15, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 3, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 2, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 3, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 21, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 70, 126, - 16, 0, 2, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 3, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 22, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 32, 0, 0, 0, - 70, 126, 16, 0, 2, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 3, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 23, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 48, 0, - 0, 0, 70, 126, 16, 0, - 2, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 3, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 24, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 64, 0, 0, 0, 70, 126, - 16, 0, 2, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 3, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 25, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 80, 0, 0, 0, - 70, 126, 16, 0, 2, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 3, 128, 131, 153, - 25, 0, 34, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 96, 0, - 0, 0, 6, 112, 16, 0, - 2, 0, 0, 0, 166, 0, - 0, 7, 242, 240, 17, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 14, 16, 0, 20, 0, - 0, 0, 166, 0, 0, 7, - 242, 240, 17, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 70, 14, - 16, 0, 21, 0, 0, 0, - 166, 0, 0, 7, 242, 240, - 17, 0, 2, 0, 0, 0, - 1, 64, 0, 0, 32, 0, - 0, 0, 70, 14, 16, 0, - 22, 0, 0, 0, 166, 0, - 0, 7, 242, 240, 17, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 48, 0, 0, 0, - 70, 14, 16, 0, 23, 0, - 0, 0, 166, 0, 0, 7, - 242, 240, 17, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 64, 0, 0, 0, 70, 14, - 16, 0, 24, 0, 0, 0, - 166, 0, 0, 7, 242, 240, - 17, 0, 2, 0, 0, 0, - 1, 64, 0, 0, 80, 0, - 0, 0, 70, 14, 16, 0, - 25, 0, 0, 0, 166, 0, - 0, 7, 18, 240, 17, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 96, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 165, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 114, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 12, 0, 0, 0, 70, 242, - 17, 0, 2, 0, 0, 0, - 165, 0, 0, 7, 242, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 60, 0, - 0, 0, 70, 254, 17, 0, - 2, 0, 0, 0, 165, 0, - 0, 7, 242, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 24, 0, 0, 0, - 70, 254, 17, 0, 2, 0, - 0, 0, 165, 0, 0, 7, - 242, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 76, 0, 0, 0, 70, 254, - 17, 0, 2, 0, 0, 0, - 165, 0, 0, 7, 242, 0, - 16, 0, 24, 0, 0, 0, - 1, 64, 0, 0, 40, 0, - 0, 0, 70, 254, 17, 0, - 2, 0, 0, 0, 165, 0, - 0, 7, 194, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 92, 0, 0, 0, - 6, 244, 17, 0, 2, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 56, 0, 0, 0, 6, 240, - 17, 0, 2, 0, 0, 0, - 165, 0, 0, 7, 242, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 12, 0, - 0, 0, 70, 254, 17, 0, - 2, 0, 0, 0, 165, 0, - 0, 7, 18, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 36, 0, 0, 0, - 6, 240, 17, 0, 2, 0, - 0, 0, 165, 0, 0, 7, - 34, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 48, 0, 0, 0, 6, 240, - 17, 0, 2, 0, 0, 0, - 54, 0, 0, 4, 66, 0, - 16, 0, 26, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 42, 0, 16, 0, - 26, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 26, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 27, 0, 0, 0, - 42, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 10, 242, 0, - 16, 0, 28, 0, 0, 0, - 166, 10, 16, 0, 26, 0, - 0, 0, 2, 64, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 37, 23, 0, 0, - 0, 4, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 27, 0, 0, 0, 10, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 26, 0, 0, 0, 42, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 27, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 26, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 238, 17, 0, - 0, 0, 0, 0, 24, 0, - 0, 7, 18, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 55, 0, 0, 9, - 130, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 29, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 19, 0, 0, 0, - 0, 0, 0, 7, 50, 0, - 16, 0, 30, 0, 0, 0, - 70, 0, 16, 0, 20, 0, - 0, 0, 70, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 50, 0, 16, 0, - 30, 0, 0, 0, 6, 0, - 16, 0, 27, 0, 0, 0, - 198, 0, 16, 0, 21, 0, - 0, 0, 70, 0, 16, 0, - 30, 0, 0, 0, 50, 0, - 0, 9, 50, 0, 16, 0, - 30, 0, 0, 0, 6, 0, - 16, 0, 29, 0, 0, 0, - 198, 0, 16, 0, 22, 0, - 0, 0, 70, 0, 16, 0, - 30, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 29, 0, 0, 0, 26, 0, - 16, 0, 27, 0, 0, 0, - 26, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 30, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 29, 0, 0, 0, 26, 0, - 16, 0, 29, 0, 0, 0, - 26, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 29, 0, 0, 0, 42, 0, - 16, 0, 27, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 50, 0, - 0, 9, 18, 0, 16, 0, - 31, 0, 0, 0, 42, 0, - 16, 0, 29, 0, 0, 0, - 42, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 29, 0, 0, 0, 26, 0, - 16, 0, 27, 0, 0, 0, - 10, 0, 16, 0, 23, 0, - 0, 0, 26, 0, 16, 0, - 30, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 29, 0, 0, 0, 26, 0, - 16, 0, 29, 0, 0, 0, - 10, 0, 16, 0, 24, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 29, 0, 0, 0, 42, 0, - 16, 0, 27, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 50, 0, - 0, 9, 34, 0, 16, 0, - 31, 0, 0, 0, 42, 0, - 16, 0, 29, 0, 0, 0, - 26, 0, 16, 0, 24, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 27, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 29, 0, - 0, 0, 10, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 29, 0, - 0, 0, 10, 0, 16, 0, - 29, 0, 0, 0, 42, 0, - 16, 0, 24, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 29, 0, - 0, 0, 26, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 29, 0, - 0, 0, 26, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 24, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 29, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 29, 0, - 0, 0, 42, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 18, 0, 0, 1, - 0, 0, 0, 8, 50, 0, - 16, 0, 29, 0, 0, 0, - 70, 0, 16, 0, 27, 0, - 0, 0, 70, 0, 16, 128, - 65, 0, 0, 0, 29, 0, - 0, 0, 50, 0, 0, 9, - 18, 0, 16, 0, 29, 0, - 0, 0, 10, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 0, 0, 0, 7, - 18, 0, 16, 0, 31, 0, - 0, 0, 10, 0, 16, 0, - 27, 0, 0, 0, 10, 0, - 16, 0, 29, 0, 0, 0, - 50, 0, 0, 9, 18, 0, - 16, 0, 29, 0, 0, 0, - 26, 0, 16, 0, 29, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 26, 0, - 16, 0, 25, 0, 0, 0, - 0, 0, 0, 7, 34, 0, - 16, 0, 31, 0, 0, 0, - 26, 0, 16, 0, 27, 0, - 0, 0, 10, 0, 16, 0, - 29, 0, 0, 0, 0, 0, - 0, 8, 18, 0, 16, 0, - 29, 0, 0, 0, 42, 0, - 16, 0, 27, 0, 0, 0, - 42, 0, 16, 128, 65, 0, - 0, 0, 29, 0, 0, 0, - 50, 0, 0, 9, 18, 0, - 16, 0, 29, 0, 0, 0, - 10, 0, 16, 0, 29, 0, - 0, 0, 26, 0, 16, 0, - 26, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 42, 0, 16, 0, 27, 0, - 0, 0, 10, 0, 16, 0, - 29, 0, 0, 0, 21, 0, - 0, 1, 165, 0, 0, 7, - 114, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 242, - 17, 0, 2, 0, 0, 0, - 0, 0, 0, 7, 114, 0, - 16, 0, 27, 0, 0, 0, - 70, 2, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 0, - 29, 0, 0, 0, 18, 0, - 0, 1, 54, 0, 0, 5, - 50, 0, 16, 0, 31, 0, - 0, 0, 70, 0, 16, 0, - 27, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 29, 0, 0, 0, 42, 0, - 16, 0, 27, 0, 0, 0, - 21, 0, 0, 1, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 31, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 31, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 168, 0, - 0, 9, 114, 224, 17, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 2, 16, 0, - 27, 0, 0, 0, 54, 0, - 0, 5, 66, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 22, 0, 0, 1, 165, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 44, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 190, 24, 0, 1, - 165, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 8, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 56, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 55, 0, 0, 9, - 66, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 41, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 2, 0, 0, 0, 54, 0, - 0, 4, 34, 0, 16, 0, - 20, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 80, 0, 0, 7, 66, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 3, 0, - 4, 3, 42, 0, 16, 0, - 20, 0, 0, 0, 85, 0, - 0, 7, 66, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 2, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 114, 0, 16, 0, 22, 0, - 0, 0, 166, 10, 16, 0, - 20, 0, 0, 0, 2, 64, - 0, 0, 183, 7, 0, 0, - 110, 15, 0, 0, 37, 23, - 0, 0, 0, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 21, 0, 0, 0, - 26, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 21, 0, 0, 0, - 42, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 20, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 13, 0, 0, 0, 50, 0, - 0, 9, 242, 0, 16, 0, - 21, 0, 0, 0, 70, 14, - 16, 0, 23, 0, 0, 0, - 166, 10, 16, 0, 19, 0, - 0, 0, 70, 14, 16, 0, - 21, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 21, 0, - 0, 1, 30, 0, 0, 7, - 34, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 34, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 28, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 39, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 31, 0, - 4, 3, 26, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 98, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 36, 0, 0, 0, - 6, 241, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 114, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 24, 0, 0, 0, 70, 242, - 17, 0, 1, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 4, 130, 0, 16, 0, - 20, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 80, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 3, 0, - 4, 3, 10, 0, 16, 0, - 21, 0, 0, 0, 30, 0, - 0, 7, 50, 0, 16, 0, - 21, 0, 0, 0, 246, 15, - 16, 0, 20, 0, 0, 0, - 150, 5, 16, 0, 20, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 11, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 21, 0, 0, 0, - 26, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 11, 0, 0, 0, - 0, 0, 0, 8, 242, 0, - 16, 0, 21, 0, 0, 0, - 70, 14, 16, 128, 65, 0, - 0, 0, 22, 0, 0, 0, - 70, 14, 16, 0, 21, 0, - 0, 0, 50, 0, 0, 9, - 242, 0, 16, 0, 21, 0, - 0, 0, 70, 14, 16, 0, - 21, 0, 0, 0, 6, 0, - 16, 0, 17, 0, 0, 0, - 70, 14, 16, 0, 22, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 242, 0, 16, 0, 23, 0, - 0, 0, 246, 15, 16, 0, - 20, 0, 0, 0, 2, 64, - 0, 0, 183, 7, 0, 0, - 110, 15, 0, 0, 37, 23, - 0, 0, 0, 4, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 22, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 22, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 21, 0, 0, 0, - 70, 2, 16, 0, 21, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 22, 0, - 0, 0, 16, 0, 0, 7, - 18, 0, 16, 0, 24, 0, - 0, 0, 70, 2, 16, 0, - 21, 0, 0, 0, 70, 2, - 16, 0, 21, 0, 0, 0, - 0, 0, 0, 7, 18, 0, - 16, 0, 24, 0, 0, 0, - 10, 0, 16, 0, 24, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 50, 0, - 0, 11, 130, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 26, 0, 16, 128, 65, 0, - 0, 0, 19, 0, 0, 0, - 42, 0, 16, 128, 65, 0, - 0, 0, 19, 0, 0, 0, - 51, 0, 0, 7, 130, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 68, 0, - 0, 5, 18, 0, 16, 0, - 24, 0, 0, 0, 10, 0, - 16, 0, 24, 0, 0, 0, - 50, 0, 0, 9, 18, 0, - 16, 0, 24, 0, 0, 0, - 58, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 24, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 52, 0, 0, 7, 18, 0, - 16, 0, 24, 0, 0, 0, - 10, 0, 16, 0, 24, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 56, 0, - 0, 7, 18, 0, 16, 0, - 24, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 24, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 21, 0, - 0, 0, 6, 0, 16, 0, - 24, 0, 0, 0, 70, 2, - 16, 0, 21, 0, 0, 0, - 70, 2, 16, 0, 22, 0, - 0, 0, 29, 0, 0, 7, - 130, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 58, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 22, 0, 0, 1, - 21, 0, 0, 1, 165, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 20, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 24, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 24, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 32, 0, - 0, 7, 18, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 60, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 31, 0, 0, 3, 42, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 86, 0, - 0, 5, 18, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 56, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 86, 0, - 0, 5, 18, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 14, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 165, 0, - 0, 7, 50, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 28, 0, 0, 0, - 70, 240, 17, 0, 0, 0, - 0, 0, 54, 0, 0, 4, - 66, 0, 16, 0, 20, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 130, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 20, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 242, 0, 16, 0, 21, 0, - 0, 0, 166, 10, 16, 0, - 20, 0, 0, 0, 2, 64, - 0, 0, 183, 7, 0, 0, - 110, 15, 0, 0, 37, 23, - 0, 0, 0, 4, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 22, 0, 0, 0, - 26, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 22, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 54, 0, 0, 8, 114, 0, - 16, 0, 23, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 22, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 112, - 16, 0, 5, 0, 0, 0, - 1, 0, 0, 7, 18, 0, - 16, 0, 24, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 24, 0, 0, 0, 10, 0, - 16, 0, 24, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 10, 82, 0, 16, 0, - 24, 0, 0, 0, 6, 0, - 16, 0, 24, 0, 0, 0, - 2, 64, 0, 0, 183, 7, - 0, 0, 0, 0, 0, 0, - 110, 15, 0, 0, 0, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 24, 0, - 0, 0, 10, 0, 16, 0, - 24, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 24, 0, - 0, 0, 42, 0, 16, 0, - 24, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 0, 0, 0, 8, - 34, 0, 16, 0, 24, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 24, 0, 0, 0, 0, 0, - 0, 8, 82, 0, 16, 0, - 24, 0, 0, 0, 6, 1, - 16, 128, 65, 0, 0, 0, - 22, 0, 0, 0, 6, 2, - 16, 0, 24, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 24, 0, 0, 0, - 26, 0, 16, 0, 24, 0, - 0, 0, 26, 0, 16, 0, - 24, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 50, 0, 0, 9, 130, 0, - 16, 0, 24, 0, 0, 0, - 10, 0, 16, 0, 24, 0, - 0, 0, 10, 0, 16, 0, - 24, 0, 0, 0, 58, 0, - 16, 0, 24, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 24, 0, 0, 0, - 42, 0, 16, 0, 24, 0, - 0, 0, 42, 0, 16, 0, - 24, 0, 0, 0, 58, 0, - 16, 0, 24, 0, 0, 0, - 85, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 86, 0, - 0, 5, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 68, 0, - 0, 5, 130, 0, 16, 0, - 24, 0, 0, 0, 58, 0, - 16, 0, 24, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 24, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 49, 0, - 0, 7, 130, 0, 16, 0, - 24, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 50, 0, 0, 9, - 18, 0, 16, 0, 25, 0, - 0, 0, 26, 0, 16, 0, - 24, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 23, 0, - 0, 0, 50, 0, 0, 9, - 34, 0, 16, 0, 25, 0, - 0, 0, 10, 0, 16, 0, - 24, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 50, 0, 0, 9, - 66, 0, 16, 0, 25, 0, - 0, 0, 42, 0, 16, 0, - 24, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 55, 0, 0, 9, - 114, 0, 16, 0, 23, 0, - 0, 0, 246, 15, 16, 0, - 24, 0, 0, 0, 70, 2, - 16, 0, 25, 0, 0, 0, - 70, 2, 16, 0, 23, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 22, 0, 0, 1, 50, 0, - 0, 9, 130, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 50, 0, - 0, 9, 18, 0, 16, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 22, 0, 0, 0, 50, 0, - 0, 9, 34, 0, 16, 0, - 22, 0, 0, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 22, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 22, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 22, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 22, 0, 0, 0, 54, 0, - 0, 5, 66, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 22, 0, 0, 1, 21, 0, - 0, 1, 54, 0, 0, 5, - 34, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 48, 0, - 0, 1, 165, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 8, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 80, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 3, 0, - 4, 3, 42, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 114, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 12, 0, 0, 0, - 70, 242, 17, 0, 0, 0, - 0, 0, 30, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 167, 0, 0, 139, 2, 195, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 3, 0, - 0, 0, 167, 0, 0, 139, - 2, 195, 0, 128, 131, 153, - 25, 0, 194, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 16, 0, - 0, 0, 6, 116, 16, 0, - 3, 0, 0, 0, 165, 0, - 0, 7, 18, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 108, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 56, 0, 0, 7, - 50, 0, 16, 0, 21, 0, - 0, 0, 6, 0, 16, 0, - 20, 0, 0, 0, 70, 0, - 16, 0, 21, 0, 0, 0, - 25, 0, 0, 5, 50, 0, - 16, 0, 21, 0, 0, 0, - 70, 0, 16, 0, 21, 0, - 0, 0, 0, 0, 0, 11, - 50, 0, 16, 0, 21, 0, - 0, 0, 70, 0, 16, 128, - 65, 0, 0, 0, 21, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 39, 0, 0, 7, - 66, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 165, 0, 0, 7, 130, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 20, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 20, 0, - 0, 0, 190, 24, 0, 1, - 54, 0, 0, 4, 130, 0, - 16, 0, 20, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 18, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 10, 0, - 16, 0, 22, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 167, 0, - 0, 139, 2, 67, 0, 128, - 131, 153, 25, 0, 50, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 112, - 16, 0, 4, 0, 0, 0, - 1, 0, 0, 7, 66, 0, - 16, 0, 22, 0, 0, 0, - 26, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 0, 0, 85, 0, - 0, 7, 34, 0, 16, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 16, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 22, 0, - 0, 0, 42, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 114, 0, 16, 0, 24, 0, - 0, 0, 166, 10, 16, 0, - 22, 0, 0, 0, 2, 64, - 0, 0, 183, 7, 0, 0, - 110, 15, 0, 0, 37, 23, - 0, 0, 0, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 24, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 24, 0, 0, 0, - 26, 0, 16, 0, 24, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 25, 0, 0, 0, - 42, 0, 16, 0, 24, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 10, 114, 0, - 16, 0, 26, 0, 0, 0, - 86, 5, 16, 0, 22, 0, - 0, 0, 2, 64, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 37, 23, 0, 0, - 0, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 25, 0, 0, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 25, 0, 0, 0, 26, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 26, 0, 0, 0, 42, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 0, 0, - 0, 8, 18, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 25, 0, 0, 0, - 0, 0, 0, 8, 34, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 0, 0, 0, 8, - 66, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 24, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 27, 0, 0, 0, 10, 0, - 16, 0, 27, 0, 0, 0, - 10, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 50, 0, - 0, 9, 130, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 27, 0, 0, 0, - 26, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 27, 0, 0, 0, - 42, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 49, 0, - 0, 7, 18, 0, 16, 0, - 28, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 10, 0, 16, 0, 22, 0, - 0, 0, 68, 0, 0, 5, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 18, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 191, 1, 0, - 0, 7, 18, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 28, 0, - 0, 0, 51, 0, 0, 8, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 128, 65, 0, 0, 0, - 22, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 50, 0, 0, 9, - 18, 0, 16, 0, 22, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 10, 0, 16, 0, 22, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 0, 128, 131, 153, 25, 0, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 112, 16, 0, 16, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 25, 0, 0, 5, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 55, 0, - 0, 9, 130, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 56, 0, - 0, 7, 18, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 0, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 14, 0, - 0, 7, 18, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 56, 0, 0, 8, - 130, 0, 16, 0, 27, 0, - 0, 0, 10, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 128, 65, 0, 0, 0, - 25, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 10, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 26, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 24, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 42, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 24, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 24, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 24, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 24, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 24, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 56, 0, - 0, 7, 18, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 50, 0, 0, 9, - 66, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 27, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 27, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 50, 0, 0, 9, - 18, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 0, - 22, 0, 0, 0, 42, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 22, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 22, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 30, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 22, 0, 0, 1, - 190, 24, 0, 1, 165, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 36, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 39, 0, 0, 7, - 34, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 31, 0, 4, 3, 26, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 194, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 36, 0, 0, 0, - 6, 244, 17, 0, 1, 0, - 0, 0, 54, 0, 0, 4, - 18, 0, 16, 0, 20, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 3, 0, 4, 3, - 26, 0, 16, 0, 20, 0, - 0, 0, 30, 0, 0, 7, - 98, 0, 16, 0, 20, 0, - 0, 0, 166, 11, 16, 0, - 19, 0, 0, 0, 6, 0, - 16, 0, 20, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 21, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 12, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 22, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 12, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 22, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 21, 0, 0, 0, 70, 14, - 16, 0, 22, 0, 0, 0, - 50, 0, 0, 9, 242, 0, - 16, 0, 21, 0, 0, 0, - 70, 14, 16, 0, 22, 0, - 0, 0, 6, 0, 16, 0, - 17, 0, 0, 0, 70, 14, - 16, 0, 21, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 10, 242, 0, - 16, 0, 24, 0, 0, 0, - 6, 0, 16, 0, 20, 0, - 0, 0, 2, 64, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 37, 23, 0, 0, - 0, 4, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 24, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 24, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 24, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 21, 0, 0, 0, 70, 2, - 16, 0, 21, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 22, 0, 0, 0, - 16, 0, 0, 7, 66, 0, - 16, 0, 20, 0, 0, 0, - 70, 2, 16, 0, 21, 0, - 0, 0, 70, 2, 16, 0, - 21, 0, 0, 0, 0, 0, - 0, 7, 66, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 66, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 50, 0, - 0, 10, 66, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 51, 0, 0, 7, - 66, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 50, 0, 0, 9, 114, 0, - 16, 0, 21, 0, 0, 0, - 166, 10, 16, 0, 20, 0, - 0, 0, 70, 2, 16, 0, - 21, 0, 0, 0, 70, 2, - 16, 0, 22, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 24, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 24, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 24, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 20, 0, 0, 0, - 54, 0, 0, 5, 18, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 24, 0, - 0, 0, 22, 0, 0, 1, - 190, 24, 0, 1, 21, 0, - 0, 1, 31, 0, 4, 3, - 10, 0, 16, 0, 1, 0, - 0, 0, 165, 0, 0, 7, - 34, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 84, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 2, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 114, 0, 16, 0, 21, 0, - 0, 0, 166, 10, 16, 0, - 19, 0, 0, 0, 2, 64, - 0, 0, 183, 7, 0, 0, - 110, 15, 0, 0, 37, 23, - 0, 0, 0, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 17, 0, 0, 8, 130, 0, - 16, 0, 19, 0, 0, 0, - 70, 14, 16, 0, 20, 0, - 0, 0, 70, 158, 144, 0, - 10, 0, 16, 0, 4, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 4, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 48, 0, - 0, 1, 30, 0, 0, 7, - 18, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 32, 0, 0, 0, - 80, 0, 0, 7, 34, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 3, 0, - 4, 3, 26, 0, 16, 0, - 20, 0, 0, 0, 167, 0, - 0, 8, 34, 0, 16, 0, - 20, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 4, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 10, 114, 0, - 16, 0, 22, 0, 0, 0, - 246, 15, 16, 0, 19, 0, - 0, 0, 2, 64, 0, 0, - 215, 7, 0, 0, 142, 15, - 0, 0, 69, 23, 0, 0, - 0, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 21, 0, 0, 0, 26, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 17, 0, - 0, 8, 66, 0, 16, 0, - 20, 0, 0, 0, 70, 14, - 16, 0, 21, 0, 0, 0, - 70, 158, 144, 0, 10, 0, - 16, 0, 4, 0, 0, 0, - 56, 0, 0, 7, 66, 0, - 16, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 52, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 4, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 22, 0, 0, 1, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 26, 0, - 16, 0, 1, 0, 0, 0, - 167, 0, 0, 8, 34, 0, - 16, 0, 19, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 4, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 4, 0, - 0, 0, 52, 0, 0, 7, - 34, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 4, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 26, 0, 16, 0, - 1, 0, 0, 0, 167, 0, - 0, 8, 34, 0, 16, 0, - 19, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 4, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 4, 0, 0, 0, - 52, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 4, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 26, 0, 16, 0, 1, 0, - 0, 0, 167, 0, 0, 8, - 34, 0, 16, 0, 19, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 4, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 4, 0, 0, 0, 52, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 4, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 26, 0, - 16, 0, 1, 0, 0, 0, - 167, 0, 0, 8, 34, 0, - 16, 0, 19, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 4, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 4, 0, - 0, 0, 52, 0, 0, 7, - 34, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 4, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 26, 0, 16, 0, - 1, 0, 0, 0, 167, 0, - 0, 8, 34, 0, 16, 0, - 19, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 4, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 4, 0, 0, 0, - 52, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 4, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 0, 0, - 0, 0, 167, 0, 0, 8, - 34, 0, 16, 0, 19, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 4, 0, 0, 0, 166, 0, - 0, 7, 18, 240, 17, 0, - 1, 0, 0, 0, 10, 0, - 16, 0, 2, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 165, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 16, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 86, 0, 0, 5, - 34, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 14, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 165, 0, 0, 7, - 34, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 60, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 31, 0, 4, 3, 26, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 80, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 49, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 64, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 98, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 56, 0, 0, 0, - 6, 241, 17, 0, 1, 0, - 0, 0, 54, 0, 0, 4, - 130, 0, 16, 0, 20, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 3, 0, 4, 3, - 10, 0, 16, 0, 21, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 242, 0, 16, 0, 22, 0, - 0, 0, 246, 15, 16, 0, - 20, 0, 0, 0, 2, 64, - 0, 0, 183, 7, 0, 0, - 110, 15, 0, 0, 37, 23, - 0, 0, 0, 4, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 21, 0, 0, 0, - 26, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 21, 0, 0, 0, - 42, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 54, 0, 0, 8, 242, 0, - 16, 0, 24, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 18, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 10, 0, - 16, 0, 25, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 25, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 18, 0, - 16, 0, 25, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 112, - 16, 0, 8, 0, 0, 0, - 136, 0, 0, 5, 34, 0, - 16, 0, 25, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 30, 0, 0, 7, - 98, 0, 16, 0, 25, 0, - 0, 0, 86, 6, 16, 0, - 20, 0, 0, 0, 86, 5, - 16, 0, 25, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 26, 0, - 0, 0, 26, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 9, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 9, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 27, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 26, 0, 0, 0, 70, 14, - 16, 0, 27, 0, 0, 0, - 50, 0, 0, 9, 242, 0, - 16, 0, 26, 0, 0, 0, - 6, 0, 16, 0, 17, 0, - 0, 0, 70, 14, 16, 0, - 27, 0, 0, 0, 70, 14, - 16, 0, 26, 0, 0, 0, - 16, 0, 0, 7, 34, 0, - 16, 0, 25, 0, 0, 0, - 70, 2, 16, 0, 21, 0, - 0, 0, 70, 2, 16, 0, - 26, 0, 0, 0, 0, 0, - 0, 7, 34, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 54, 0, 0, 5, - 114, 0, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 0, - 26, 0, 0, 0, 54, 0, - 0, 5, 66, 0, 16, 0, - 25, 0, 0, 0, 10, 0, - 16, 0, 25, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 27, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 48, 0, 0, 1, - 49, 0, 0, 7, 130, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 1, 0, 0, 7, - 66, 0, 16, 0, 25, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 39, 0, 0, 7, 130, 0, - 16, 0, 26, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 3, 0, 0, 3, - 58, 0, 16, 0, 25, 0, - 0, 0, 136, 0, 0, 5, - 130, 0, 16, 0, 25, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 30, 0, - 0, 7, 50, 0, 16, 0, - 28, 0, 0, 0, 150, 5, - 16, 0, 20, 0, 0, 0, - 246, 15, 16, 0, 25, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 29, 0, 0, 0, 10, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 9, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 9, 0, 0, 0, - 0, 0, 0, 8, 242, 0, - 16, 0, 28, 0, 0, 0, - 70, 14, 16, 128, 65, 0, - 0, 0, 29, 0, 0, 0, - 70, 14, 16, 0, 28, 0, - 0, 0, 50, 0, 0, 9, - 242, 0, 16, 0, 28, 0, - 0, 0, 6, 0, 16, 0, - 17, 0, 0, 0, 70, 14, - 16, 0, 28, 0, 0, 0, - 70, 14, 16, 0, 29, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 70, 2, 16, 0, - 21, 0, 0, 0, 70, 2, - 16, 0, 28, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 49, 0, - 0, 7, 130, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 55, 0, 0, 9, - 242, 0, 16, 0, 27, 0, - 0, 0, 246, 15, 16, 0, - 25, 0, 0, 0, 70, 14, - 16, 0, 28, 0, 0, 0, - 70, 14, 16, 0, 27, 0, - 0, 0, 22, 0, 0, 1, - 49, 0, 0, 7, 18, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 26, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 27, 0, 0, 0, 246, 15, - 16, 0, 27, 0, 0, 0, - 70, 2, 16, 0, 24, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 24, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 55, 0, 0, 9, 242, 0, - 16, 0, 24, 0, 0, 0, - 6, 0, 16, 0, 25, 0, - 0, 0, 70, 14, 16, 0, - 26, 0, 0, 0, 70, 14, - 16, 0, 24, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 22, 0, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 24, 0, - 0, 0, 86, 0, 0, 5, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 24, 0, 0, 0, 14, 0, - 0, 10, 130, 0, 16, 0, - 23, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 58, 0, 16, 0, 23, 0, - 0, 0, 31, 0, 4, 3, - 42, 0, 16, 0, 19, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 25, 0, - 0, 0, 10, 0, 16, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 226, 0, 16, 0, 25, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 233, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 18, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 80, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 16, 0, 0, 7, 34, 0, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 24, 0, - 0, 0, 70, 2, 16, 0, - 24, 0, 0, 0, 0, 0, - 0, 7, 66, 0, 16, 0, - 26, 0, 0, 0, 26, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 66, 0, 16, 0, 26, 0, - 0, 0, 42, 0, 16, 0, - 26, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 24, 0, 0, 0, - 166, 10, 16, 0, 26, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 21, 0, 0, 0, 150, 7, - 16, 128, 65, 0, 0, 0, - 25, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 70, 2, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 28, 0, - 0, 0, 50, 0, 0, 10, - 114, 0, 16, 0, 28, 0, - 0, 0, 246, 15, 16, 128, - 65, 0, 0, 0, 26, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 29, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 28, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 56, 0, - 0, 8, 18, 0, 16, 0, - 26, 0, 0, 0, 26, 0, - 16, 0, 26, 0, 0, 0, - 10, 0, 16, 128, 65, 0, - 0, 0, 26, 0, 0, 0, - 56, 0, 0, 7, 18, 0, - 16, 0, 26, 0, 0, 0, - 42, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 56, 0, - 0, 7, 18, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 56, 0, 0, 7, - 18, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 52, 0, 0, 7, 18, 0, - 16, 0, 26, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 191, 50, 0, - 0, 10, 226, 0, 16, 0, - 25, 0, 0, 0, 6, 9, - 16, 128, 65, 0, 0, 0, - 28, 0, 0, 0, 6, 0, - 16, 0, 26, 0, 0, 0, - 86, 14, 16, 0, 25, 0, - 0, 0, 168, 0, 0, 9, - 114, 224, 17, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 150, 7, 16, 0, 25, 0, - 0, 0, 21, 0, 0, 1, - 50, 0, 0, 9, 114, 0, - 16, 0, 21, 0, 0, 0, - 70, 2, 16, 0, 24, 0, - 0, 0, 246, 15, 16, 0, - 23, 0, 0, 0, 70, 2, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 58, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 21, 0, 0, 1, 54, 0, - 0, 5, 130, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 22, 0, 0, 1, 21, 0, - 0, 1, 27, 0, 0, 5, - 34, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 10, 114, 0, 16, 0, - 21, 0, 0, 0, 86, 5, - 16, 0, 19, 0, 0, 0, - 2, 64, 0, 0, 183, 7, - 0, 0, 110, 15, 0, 0, - 37, 23, 0, 0, 0, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 68, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 64, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 54, 0, - 0, 8, 114, 0, 16, 0, - 22, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 8, 50, 0, - 16, 0, 25, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 255, 255, 127, 127, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 35, 0, 0, 9, 130, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 3, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 167, 0, 0, 139, 2, 99, - 0, 128, 131, 153, 25, 0, - 114, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 114, 16, 0, 10, 0, - 0, 0, 30, 0, 0, 10, - 194, 0, 16, 0, 25, 0, - 0, 0, 246, 15, 16, 0, - 22, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 167, 0, 0, 139, 2, 99, - 0, 128, 131, 153, 25, 0, - 114, 0, 16, 0, 28, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 114, 16, 0, 10, 0, - 0, 0, 167, 0, 0, 139, - 2, 99, 0, 128, 131, 153, - 25, 0, 114, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 114, 16, 0, - 10, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 26, 0, 0, 0, 70, 2, - 16, 0, 28, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 29, 0, - 0, 0, 56, 0, 0, 7, - 114, 0, 16, 0, 30, 0, - 0, 0, 38, 9, 16, 0, - 28, 0, 0, 0, 150, 4, - 16, 0, 29, 0, 0, 0, - 50, 0, 0, 10, 114, 0, - 16, 0, 30, 0, 0, 0, - 150, 4, 16, 0, 28, 0, - 0, 0, 38, 9, 16, 0, - 29, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 30, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 70, 2, - 16, 0, 30, 0, 0, 0, - 70, 2, 16, 0, 30, 0, - 0, 0, 68, 0, 0, 5, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 30, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 30, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 29, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 70, 2, 16, 0, 28, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 16, 0, - 0, 7, 66, 0, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 29, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 25, 0, 0, 0, 14, 0, - 0, 10, 130, 0, 16, 0, - 25, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 58, 0, 16, 0, 25, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 192, 58, 0, - 16, 0, 26, 0, 0, 0, - 14, 0, 0, 10, 130, 0, - 16, 0, 26, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 128, 63, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 58, 0, 16, 0, - 26, 0, 0, 0, 14, 0, - 0, 10, 130, 0, 16, 0, - 28, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 58, 0, 16, 0, 23, 0, - 0, 0, 14, 0, 0, 10, - 130, 0, 16, 0, 29, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 0, 0, 128, 63, 42, 0, - 16, 0, 25, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 20, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 26, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 30, 0, - 0, 0, 70, 2, 16, 0, - 26, 0, 0, 0, 70, 2, - 16, 0, 28, 0, 0, 0, - 16, 0, 0, 7, 18, 0, - 16, 0, 31, 0, 0, 0, - 70, 2, 16, 0, 26, 0, - 0, 0, 70, 2, 16, 0, - 29, 0, 0, 0, 16, 0, - 0, 7, 18, 0, 16, 0, - 32, 0, 0, 0, 70, 2, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 30, 0, - 0, 0, 56, 0, 0, 7, - 34, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 31, 0, 0, 0, - 50, 0, 0, 10, 34, 0, - 16, 0, 31, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 26, 0, - 16, 128, 65, 0, 0, 0, - 31, 0, 0, 0, 56, 0, - 0, 7, 66, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 31, 0, 0, 0, - 42, 0, 16, 128, 65, 0, - 0, 0, 31, 0, 0, 0, - 49, 0, 0, 7, 66, 0, - 16, 0, 31, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 56, 0, - 0, 7, 34, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 31, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 31, 0, - 0, 0, 26, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 49, 0, 0, 7, 34, 0, - 16, 0, 31, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 10, 0, - 16, 0, 31, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 49, 0, - 0, 7, 130, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 58, 0, 16, 0, 25, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 22, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 128, - 65, 0, 0, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 55, 32, 0, 9, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 0, 0, 0, 8, - 66, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 51, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 52, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 56, 0, 0, 7, 114, 0, - 16, 0, 29, 0, 0, 0, - 246, 15, 16, 0, 23, 0, - 0, 0, 70, 2, 16, 0, - 29, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 28, 0, 0, 0, - 246, 15, 16, 0, 22, 0, - 0, 0, 70, 2, 16, 0, - 29, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 26, 0, 0, 0, 70, 2, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 28, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 26, 0, - 0, 0, 70, 2, 16, 0, - 26, 0, 0, 0, 49, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 32, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 56, 0, 0, 7, - 66, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 71, 3, 128, 63, - 55, 0, 0, 9, 34, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 26, 0, 16, 0, 32, 0, - 0, 0, 26, 0, 16, 0, - 25, 0, 0, 0, 55, 0, - 0, 9, 114, 0, 16, 0, - 22, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 30, 0, - 0, 0, 70, 2, 16, 0, - 22, 0, 0, 0, 55, 0, - 0, 9, 50, 0, 16, 0, - 25, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 70, 0, 16, 0, 32, 0, - 0, 0, 70, 0, 16, 0, - 25, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 22, 0, 0, 1, - 49, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 19, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 20, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 22, 0, 0, 0, 6, 0, - 16, 0, 25, 0, 0, 0, - 70, 2, 16, 0, 20, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 20, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 21, 0, 0, 1, - 165, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 72, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 31, 0, - 4, 3, 26, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 80, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 49, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 50, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 48, 0, 0, 0, - 70, 240, 17, 0, 1, 0, - 0, 0, 165, 0, 0, 7, - 194, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 44, 0, 0, 0, 6, 244, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 18, 0, - 16, 0, 21, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 34, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 26, 0, - 16, 0, 21, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 26, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 10, 242, 0, - 16, 0, 28, 0, 0, 0, - 6, 0, 16, 0, 21, 0, - 0, 0, 2, 64, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 37, 23, 0, 0, - 0, 4, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 26, 0, 0, 0, 10, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 26, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 226, 0, 16, 0, - 25, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 233, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 114, 0, 16, 0, - 29, 0, 0, 0, 70, 2, - 16, 0, 26, 0, 0, 0, - 54, 0, 0, 8, 114, 0, - 16, 0, 30, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 8, - 242, 0, 16, 0, 31, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 42, 0, 16, 0, 20, 0, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 22, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 167, 0, 0, 139, 2, 67, - 0, 128, 131, 153, 25, 0, - 50, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 112, 16, 0, 6, 0, - 0, 0, 30, 0, 0, 7, - 242, 0, 16, 0, 32, 0, - 0, 0, 70, 4, 16, 0, - 20, 0, 0, 0, 6, 5, - 16, 0, 32, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 33, 0, - 0, 0, 10, 0, 16, 0, - 32, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 34, 0, 0, 0, 26, 0, - 16, 0, 32, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 35, 0, 0, 0, - 42, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 0, 0, 0, 8, - 242, 0, 16, 0, 36, 0, - 0, 0, 70, 14, 16, 128, - 65, 0, 0, 0, 33, 0, - 0, 0, 70, 14, 16, 0, - 34, 0, 0, 0, 50, 0, - 0, 9, 242, 0, 16, 0, - 37, 0, 0, 0, 6, 0, - 16, 0, 19, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 33, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 38, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 35, 0, 0, 0, 70, 14, - 16, 0, 32, 0, 0, 0, - 50, 0, 0, 9, 242, 0, - 16, 0, 39, 0, 0, 0, - 6, 0, 16, 0, 19, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 70, 14, - 16, 0, 35, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 39, 0, 0, 0, 58, 0, - 16, 0, 39, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8, - 242, 0, 16, 0, 40, 0, - 0, 0, 70, 14, 16, 128, - 65, 0, 0, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 39, 0, 0, 0, 56, 0, - 0, 10, 242, 0, 16, 0, - 40, 0, 0, 0, 70, 14, - 16, 0, 40, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 63, 16, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 29, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 23, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 7, 0, - 0, 1, 21, 0, 0, 1, - 50, 0, 0, 9, 242, 0, - 16, 0, 36, 0, 0, 0, - 6, 0, 16, 0, 17, 0, - 0, 0, 70, 14, 16, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 33, 0, 0, 0, - 50, 0, 0, 9, 242, 0, - 16, 0, 38, 0, 0, 0, - 6, 0, 16, 0, 17, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 70, 14, - 16, 0, 35, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 38, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8, - 242, 0, 16, 0, 41, 0, - 0, 0, 70, 14, 16, 128, - 65, 0, 0, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 56, 0, - 0, 10, 242, 0, 16, 0, - 42, 0, 0, 0, 70, 14, - 16, 0, 41, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 63, 16, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 70, 2, 16, 0, - 42, 0, 0, 0, 70, 2, - 16, 0, 42, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 42, 0, 0, 0, - 58, 0, 16, 0, 42, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 29, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 29, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 7, 0, 0, 1, - 21, 0, 0, 1, 0, 0, - 0, 7, 114, 0, 16, 0, - 41, 0, 0, 0, 38, 9, - 16, 0, 37, 0, 0, 0, - 38, 9, 16, 0, 39, 0, - 0, 0, 50, 0, 0, 13, - 114, 0, 16, 0, 41, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 41, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 118, 14, - 16, 0, 25, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 68, 0, - 0, 5, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 56, 0, 0, 7, - 114, 0, 16, 0, 40, 0, - 0, 0, 246, 15, 16, 0, - 22, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 40, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 43, 0, 0, 0, 150, 4, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 50, 0, 0, 10, - 114, 0, 16, 0, 41, 0, - 0, 0, 38, 9, 16, 0, - 41, 0, 0, 0, 38, 9, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 43, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 150, 7, 16, 0, 25, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 0, 0, - 0, 7, 114, 0, 16, 0, - 40, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 50, 0, 0, 13, - 114, 0, 16, 0, 43, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 40, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 70, 2, - 16, 0, 29, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 68, 0, 0, 5, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 63, - 58, 0, 16, 0, 36, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 44, 0, 0, 0, 246, 15, - 16, 0, 30, 0, 0, 0, - 70, 2, 16, 0, 42, 0, - 0, 0, 56, 0, 0, 7, - 114, 0, 16, 0, 45, 0, - 0, 0, 38, 9, 16, 0, - 43, 0, 0, 0, 150, 4, - 16, 0, 44, 0, 0, 0, - 50, 0, 0, 10, 114, 0, - 16, 0, 45, 0, 0, 0, - 150, 4, 16, 0, 43, 0, - 0, 0, 38, 9, 16, 0, - 44, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 45, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 70, 2, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 44, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 45, 0, 0, 0, 70, 2, - 16, 0, 45, 0, 0, 0, - 0, 0, 0, 7, 18, 0, - 16, 0, 46, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 50, 0, - 0, 9, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 42, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 52, 0, 0, 7, 34, 0, - 16, 0, 46, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 70, 2, - 16, 0, 41, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 33, 0, - 0, 0, 10, 0, 16, 128, - 65, 0, 0, 0, 41, 0, - 0, 0, 10, 0, 16, 0, - 41, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 34, 0, 0, 0, 70, 2, - 16, 0, 41, 0, 0, 0, - 70, 2, 16, 0, 45, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 29, 0, - 0, 0, 26, 0, 16, 0, - 46, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 35, 0, 0, 0, - 26, 0, 16, 128, 65, 0, - 0, 0, 46, 0, 0, 0, - 26, 0, 16, 0, 46, 0, - 0, 0, 10, 0, 16, 0, - 46, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 36, 0, 0, 0, - 75, 0, 0, 5, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 0, 0, - 0, 8, 130, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 35, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 51, 0, 0, 7, - 130, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 14, 0, 0, 7, 130, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 49, 0, - 0, 7, 130, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 49, 0, 0, 7, - 130, 0, 16, 0, 39, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 39, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 39, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 29, 0, - 0, 0, 26, 0, 16, 0, - 46, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 39, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 236, 81, 184, 190, 49, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 38, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 180, 1, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 41, 0, - 0, 0, 150, 7, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 29, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 45, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 41, 0, 0, 0, 246, 15, - 16, 0, 35, 0, 0, 0, - 150, 7, 16, 0, 25, 0, - 0, 0, 56, 0, 0, 7, - 114, 0, 16, 0, 47, 0, - 0, 0, 246, 15, 16, 0, - 23, 0, 0, 0, 70, 2, - 16, 0, 42, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 37, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 37, 0, 0, 0, - 70, 2, 16, 0, 39, 0, - 0, 0, 56, 0, 0, 10, - 114, 0, 16, 0, 37, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 68, 0, - 0, 5, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 37, 0, 0, 0, 246, 15, - 16, 0, 33, 0, 0, 0, - 70, 2, 16, 0, 47, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 35, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 50, 0, - 0, 10, 114, 0, 16, 0, - 39, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 37, 0, 0, 0, 246, 15, - 16, 0, 33, 0, 0, 0, - 70, 2, 16, 0, 47, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 0, 39, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 68, 0, - 0, 5, 130, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 45, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 0, - 45, 0, 0, 0, 70, 2, - 16, 0, 45, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 38, 0, 0, 0, 49, 0, - 0, 7, 18, 0, 16, 0, - 39, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 68, 0, 0, 5, - 34, 0, 16, 0, 39, 0, - 0, 0, 58, 0, 16, 0, - 38, 0, 0, 0, 1, 0, - 0, 7, 18, 0, 16, 0, - 39, 0, 0, 0, 26, 0, - 16, 0, 39, 0, 0, 0, - 10, 0, 16, 0, 39, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 38, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 0, - 39, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 49, 0, - 0, 8, 130, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 128, 129, 0, 0, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 50, 0, 0, 9, 114, 0, - 16, 0, 37, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 246, 15, 16, 0, - 22, 0, 0, 0, 70, 2, - 16, 0, 41, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 14, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 14, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 37, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 43, 0, - 0, 0, 50, 0, 0, 12, - 114, 0, 16, 0, 39, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 55, 0, 0, 9, - 114, 0, 16, 0, 39, 0, - 0, 0, 246, 15, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 29, 0, - 0, 0, 55, 0, 0, 9, - 114, 0, 16, 0, 39, 0, - 0, 0, 246, 15, 16, 0, - 29, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 29, 0, - 0, 0, 50, 0, 0, 13, - 114, 0, 16, 0, 40, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 40, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 40, 0, - 0, 0, 70, 2, 16, 0, - 44, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 36, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 5, 114, 0, 16, 0, - 29, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 7, 0, 0, 1, - 21, 0, 0, 1, 56, 0, - 0, 7, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 42, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 52, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 68, 0, - 0, 5, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 49, 0, - 0, 8, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 128, 129, 0, 0, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 50, 0, 0, 10, 114, 0, - 16, 0, 40, 0, 0, 0, - 246, 15, 16, 128, 65, 0, - 0, 0, 34, 0, 0, 0, - 70, 2, 16, 0, 42, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 30, 0, 0, 0, - 50, 0, 0, 9, 114, 0, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 0, 40, 0, - 0, 0, 246, 15, 16, 0, - 30, 0, 0, 0, 70, 2, - 16, 0, 30, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 34, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 33, 0, 0, 0, - 70, 2, 16, 0, 34, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 33, 0, - 0, 0, 6, 0, 16, 0, - 19, 0, 0, 0, 70, 2, - 16, 0, 34, 0, 0, 0, - 70, 2, 16, 0, 33, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 32, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 32, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 32, 0, 0, 0, 6, 0, - 16, 0, 19, 0, 0, 0, - 70, 2, 16, 0, 32, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 63, 1, 64, 0, 0, - 0, 0, 0, 63, 0, 0, - 0, 8, 114, 0, 16, 0, - 33, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 33, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 32, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 32, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 32, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 33, 0, - 0, 0, 70, 2, 16, 0, - 32, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 32, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 32, 0, - 0, 0, 70, 2, 16, 0, - 33, 0, 0, 0, 0, 0, - 0, 7, 114, 0, 16, 0, - 32, 0, 0, 0, 70, 2, - 16, 0, 31, 0, 0, 0, - 70, 2, 16, 0, 32, 0, - 0, 0, 55, 0, 0, 9, - 114, 0, 16, 0, 33, 0, - 0, 0, 166, 10, 16, 0, - 19, 0, 0, 0, 70, 2, - 16, 0, 32, 0, 0, 0, - 70, 2, 16, 0, 31, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 55, 0, 0, 9, 114, 0, - 16, 0, 32, 0, 0, 0, - 246, 15, 16, 0, 23, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 70, 2, - 16, 0, 30, 0, 0, 0, - 55, 0, 0, 9, 242, 0, - 16, 0, 33, 0, 0, 0, - 246, 15, 16, 0, 23, 0, - 0, 0, 70, 14, 16, 0, - 33, 0, 0, 0, 70, 14, - 16, 0, 31, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 70, 2, 16, 0, - 42, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 52, 0, - 0, 7, 34, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 50, 0, 0, 10, 18, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 55, 0, - 0, 9, 50, 0, 16, 0, - 34, 0, 0, 0, 246, 15, - 16, 0, 35, 0, 0, 0, - 70, 0, 16, 0, 34, 0, - 0, 0, 70, 0, 16, 0, - 46, 0, 0, 0, 55, 0, - 0, 9, 50, 0, 16, 0, - 34, 0, 0, 0, 246, 15, - 16, 0, 29, 0, 0, 0, - 70, 0, 16, 0, 34, 0, - 0, 0, 70, 0, 16, 0, - 46, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 34, 0, 0, 0, - 26, 0, 16, 0, 34, 0, - 0, 0, 29, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 5, 114, 0, 16, 0, - 29, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 54, 0, 0, 5, 114, 0, - 16, 0, 30, 0, 0, 0, - 70, 2, 16, 0, 32, 0, - 0, 0, 54, 0, 0, 5, - 242, 0, 16, 0, 31, 0, - 0, 0, 70, 14, 16, 0, - 33, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 7, 0, 0, 1, 21, 0, - 0, 1, 54, 0, 0, 5, - 114, 0, 16, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 54, 0, - 0, 5, 114, 0, 16, 0, - 30, 0, 0, 0, 70, 2, - 16, 0, 32, 0, 0, 0, - 54, 0, 0, 5, 242, 0, - 16, 0, 31, 0, 0, 0, - 70, 14, 16, 0, 33, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 22, 0, 0, 1, 165, 0, - 0, 7, 130, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 52, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 114, 0, 16, 0, 32, 0, - 0, 0, 70, 2, 16, 0, - 29, 0, 0, 0, 54, 0, - 0, 5, 114, 0, 16, 0, - 33, 0, 0, 0, 70, 2, - 16, 0, 30, 0, 0, 0, - 54, 0, 0, 5, 242, 0, - 16, 0, 34, 0, 0, 0, - 70, 14, 16, 0, 31, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 50, 0, - 16, 0, 35, 0, 0, 0, - 70, 0, 16, 0, 20, 0, - 0, 0, 246, 15, 16, 0, - 22, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 35, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 35, 0, - 0, 0, 26, 0, 16, 0, - 35, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 0, 0, 0, 8, - 242, 0, 16, 0, 35, 0, - 0, 0, 70, 14, 16, 128, - 65, 0, 0, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 35, 0, 0, 0, 50, 0, - 0, 9, 242, 0, 16, 0, - 37, 0, 0, 0, 6, 0, - 16, 0, 17, 0, 0, 0, - 70, 14, 16, 0, 35, 0, - 0, 0, 70, 14, 16, 0, - 36, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 35, 0, - 0, 0, 6, 0, 16, 0, - 19, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 32, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 37, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 38, 0, 0, 0, 150, 7, - 16, 0, 25, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 35, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 36, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 16, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 38, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 30, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 33, 0, 0, 0, 75, 0, - 0, 5, 130, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 0, 0, 0, 8, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 32, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 51, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 14, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 49, 0, 0, 7, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 236, 81, 184, 190, 49, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 180, 1, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 0, 0, - 0, 8, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 32, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 56, 0, 0, 7, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 14, 0, - 0, 7, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 30, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 14, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 246, 15, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 0, 0, 0, 7, - 114, 0, 16, 0, 39, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 0, 38, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 55, 0, 0, 9, - 114, 0, 16, 0, 32, 0, - 0, 0, 246, 15, 16, 0, - 26, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 32, 0, - 0, 0, 55, 0, 0, 9, - 242, 0, 16, 0, 36, 0, - 0, 0, 246, 15, 16, 0, - 26, 0, 0, 0, 70, 14, - 16, 0, 38, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 68, 0, 0, 5, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 58, 0, - 16, 0, 29, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 191, - 50, 0, 0, 9, 114, 0, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 246, 15, 16, 0, - 23, 0, 0, 0, 70, 2, - 16, 0, 33, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 35, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 0, 0, 0, 7, - 114, 0, 16, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 34, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 55, 0, 0, 9, 114, 0, - 16, 0, 35, 0, 0, 0, - 166, 10, 16, 0, 19, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 34, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 55, 0, - 0, 9, 114, 0, 16, 0, - 33, 0, 0, 0, 246, 15, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 33, 0, 0, 0, 55, 0, - 0, 9, 242, 0, 16, 0, - 34, 0, 0, 0, 246, 15, - 16, 0, 29, 0, 0, 0, - 70, 14, 16, 0, 35, 0, - 0, 0, 70, 14, 16, 0, - 34, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 22, 0, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 34, 0, 0, 0, - 86, 0, 0, 5, 130, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 14, 0, 0, 10, - 130, 0, 16, 0, 21, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 0, 0, 128, 63, 58, 0, - 16, 0, 21, 0, 0, 0, - 31, 0, 4, 3, 42, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 80, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 70, 2, - 16, 0, 33, 0, 0, 0, - 70, 2, 16, 0, 33, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 68, 0, 0, 5, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 56, 0, 0, 7, - 114, 0, 16, 0, 32, 0, - 0, 0, 246, 15, 16, 0, - 26, 0, 0, 0, 70, 2, - 16, 0, 33, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 35, 0, 0, 0, - 150, 7, 16, 128, 65, 0, - 0, 0, 25, 0, 0, 0, - 70, 2, 16, 0, 26, 0, - 0, 0, 50, 0, 0, 10, - 114, 0, 16, 0, 35, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 34, 0, - 0, 0, 246, 15, 16, 0, - 21, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 32, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 32, 0, 0, 0, 246, 15, - 16, 128, 65, 0, 0, 0, - 29, 0, 0, 0, 70, 2, - 16, 0, 32, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 32, 0, 0, 0, 70, 2, - 16, 0, 32, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 68, 0, - 0, 5, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 56, 0, 0, 8, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 52, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 191, - 50, 0, 0, 10, 226, 0, - 16, 0, 25, 0, 0, 0, - 6, 9, 16, 128, 65, 0, - 0, 0, 32, 0, 0, 0, - 246, 15, 16, 0, 22, 0, - 0, 0, 86, 14, 16, 0, - 25, 0, 0, 0, 168, 0, - 0, 9, 114, 224, 17, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 150, 7, 16, 0, - 25, 0, 0, 0, 21, 0, - 0, 1, 50, 0, 0, 9, - 226, 0, 16, 0, 25, 0, - 0, 0, 6, 9, 16, 0, - 33, 0, 0, 0, 246, 15, - 16, 0, 21, 0, 0, 0, - 6, 9, 16, 0, 26, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 28, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 28, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 21, 0, - 0, 0, 21, 0, 0, 1, - 54, 0, 0, 5, 18, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 22, 0, 0, 1, - 18, 0, 0, 1, 165, 0, - 0, 7, 98, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 76, 0, 0, 0, - 6, 241, 17, 0, 0, 0, - 0, 0, 49, 0, 0, 10, - 98, 0, 16, 0, 19, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 166, 9, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 50, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 48, 0, 0, 0, - 70, 240, 17, 0, 1, 0, - 0, 0, 165, 0, 0, 7, - 66, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 80, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 165, 0, - 0, 7, 50, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 44, 0, 0, 0, - 70, 240, 17, 0, 0, 0, - 0, 0, 54, 0, 0, 4, - 66, 0, 16, 0, 21, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 130, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 21, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 26, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 242, 0, 16, 0, 28, 0, - 0, 0, 166, 10, 16, 0, - 21, 0, 0, 0, 2, 64, - 0, 0, 183, 7, 0, 0, - 110, 15, 0, 0, 37, 23, - 0, 0, 0, 4, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 26, 0, 0, 0, - 10, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 26, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 21, 0, 0, 0, - 42, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 54, 0, 0, 8, 226, 0, - 16, 0, 25, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 8, - 242, 0, 16, 0, 32, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 23, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 167, 0, 0, 139, 2, 67, - 0, 128, 131, 153, 25, 0, - 50, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 112, 16, 0, 6, 0, - 0, 0, 30, 0, 0, 7, - 242, 0, 16, 0, 35, 0, - 0, 0, 70, 4, 16, 0, - 20, 0, 0, 0, 6, 5, - 16, 0, 35, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 35, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 35, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 7, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 38, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 50, 0, 0, 9, 242, 0, - 16, 0, 38, 0, 0, 0, - 6, 0, 16, 0, 17, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 70, 14, - 16, 0, 36, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 39, 0, - 0, 0, 42, 0, 16, 0, - 35, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 7, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 40, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 39, 0, 0, 0, 70, 14, - 16, 0, 35, 0, 0, 0, - 50, 0, 0, 9, 242, 0, - 16, 0, 40, 0, 0, 0, - 6, 0, 16, 0, 17, 0, - 0, 0, 70, 14, 16, 0, - 40, 0, 0, 0, 70, 14, - 16, 0, 39, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8, - 242, 0, 16, 0, 41, 0, - 0, 0, 70, 14, 16, 128, - 65, 0, 0, 0, 38, 0, - 0, 0, 70, 14, 16, 0, - 40, 0, 0, 0, 56, 0, - 0, 10, 242, 0, 16, 0, - 42, 0, 0, 0, 70, 14, - 16, 0, 41, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 63, 16, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 70, 2, 16, 0, - 42, 0, 0, 0, 70, 2, - 16, 0, 42, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 42, 0, 0, 0, - 58, 0, 16, 0, 42, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 29, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 29, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 7, 0, 0, 1, - 21, 0, 0, 1, 68, 0, - 0, 5, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 0, 0, 0, 7, 114, 0, - 16, 0, 41, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 41, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 63, 58, 0, 16, 0, - 38, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 56, 0, 0, 7, 114, 0, - 16, 0, 42, 0, 0, 0, - 246, 15, 16, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 42, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 42, 0, - 0, 0, 50, 0, 0, 13, - 114, 0, 16, 0, 41, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 41, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 70, 2, - 16, 0, 26, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 70, 2, 16, 0, - 42, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 41, 0, 0, 0, 70, 2, - 16, 0, 41, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 36, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 7, 0, 0, 1, 21, 0, - 0, 1, 56, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 42, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 52, 0, - 0, 7, 130, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 49, 0, 0, 8, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 128, - 129, 0, 0, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 41, 0, 0, 0, 246, 15, - 16, 128, 65, 0, 0, 0, - 26, 0, 0, 0, 70, 2, - 16, 0, 42, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 29, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 41, 0, 0, 0, 70, 2, - 16, 0, 41, 0, 0, 0, - 246, 15, 16, 0, 26, 0, - 0, 0, 150, 7, 16, 0, - 25, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 36, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 50, 0, 0, 9, 114, 0, - 16, 0, 36, 0, 0, 0, - 6, 0, 16, 0, 19, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 35, 0, - 0, 0, 6, 0, 16, 0, - 19, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 0, 39, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 63, - 1, 64, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 8, - 114, 0, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 35, 0, - 0, 0, 246, 15, 16, 0, - 26, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 0, 0, 0, 7, - 114, 0, 16, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 32, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 55, 0, 0, 9, 114, 0, - 16, 0, 35, 0, 0, 0, - 246, 15, 16, 0, 20, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 32, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 55, 0, - 0, 9, 226, 0, 16, 0, - 25, 0, 0, 0, 246, 15, - 16, 0, 23, 0, 0, 0, - 6, 9, 16, 0, 41, 0, - 0, 0, 86, 14, 16, 0, - 25, 0, 0, 0, 55, 0, - 0, 9, 242, 0, 16, 0, - 32, 0, 0, 0, 246, 15, - 16, 0, 23, 0, 0, 0, - 70, 14, 16, 0, 35, 0, - 0, 0, 70, 14, 16, 0, - 32, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 22, 0, 0, 1, - 165, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 52, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 114, 0, 16, 0, - 35, 0, 0, 0, 150, 7, - 16, 0, 25, 0, 0, 0, - 54, 0, 0, 5, 242, 0, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 32, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 26, 0, 0, 0, - 30, 0, 0, 7, 50, 0, - 16, 0, 37, 0, 0, 0, - 70, 0, 16, 0, 20, 0, - 0, 0, 246, 15, 16, 0, - 23, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 0, 0, 0, 8, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 128, - 65, 0, 0, 0, 38, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 50, 0, - 0, 9, 242, 0, 16, 0, - 39, 0, 0, 0, 6, 0, - 16, 0, 17, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 39, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 40, 0, - 0, 0, 70, 2, 16, 0, - 26, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 39, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 0, 40, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 68, 0, 0, 5, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 30, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 58, 0, 16, 0, - 30, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 191, 50, 0, - 0, 9, 114, 0, 16, 0, - 40, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 246, 15, 16, 0, 26, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 37, 0, 0, 0, 6, 0, - 16, 0, 19, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 37, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 0, 0, 0, 7, 114, 0, - 16, 0, 37, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 55, 0, - 0, 9, 114, 0, 16, 0, - 37, 0, 0, 0, 246, 15, - 16, 0, 20, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 70, 2, 16, 0, - 36, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 55, 0, 0, 9, - 114, 0, 16, 0, 35, 0, - 0, 0, 246, 15, 16, 0, - 30, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 55, 0, 0, 9, - 242, 0, 16, 0, 36, 0, - 0, 0, 246, 15, 16, 0, - 30, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 22, 0, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 36, 0, 0, 0, 86, 0, - 0, 5, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 14, 0, 0, 10, 130, 0, - 16, 0, 22, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 128, 63, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 58, 0, 16, 0, - 22, 0, 0, 0, 31, 0, - 4, 3, 26, 0, 16, 0, - 19, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 114, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 226, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 80, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 68, 0, - 0, 5, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 56, 0, 0, 7, 114, 0, - 16, 0, 38, 0, 0, 0, - 246, 15, 16, 0, 30, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 39, 0, 0, 0, 70, 2, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 37, 0, 0, 0, - 50, 0, 0, 10, 114, 0, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 36, 0, 0, 0, - 246, 15, 16, 0, 22, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 50, 0, 0, 10, - 114, 0, 16, 0, 38, 0, - 0, 0, 246, 15, 16, 128, - 65, 0, 0, 0, 33, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 130, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 56, 0, - 0, 8, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 191, 50, 0, - 0, 10, 114, 0, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 38, 0, 0, 0, 246, 15, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 114, 224, 17, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 21, 0, 0, 1, - 50, 0, 0, 9, 114, 0, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 246, 15, 16, 0, - 22, 0, 0, 0, 70, 2, - 16, 0, 26, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 165, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 76, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 14, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 21, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 26, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 26, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 21, 0, 0, 1, 54, 0, - 0, 5, 66, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 22, 0, 0, 1, 21, 0, - 0, 1, 165, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 84, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 72, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 51, 0, - 0, 7, 18, 0, 16, 0, - 17, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 49, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 17, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 17, 0, 0, 0, - 1, 64, 0, 0, 88, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 31, 0, 4, 3, - 42, 0, 16, 0, 1, 0, - 0, 0, 165, 0, 0, 7, - 98, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 4, 0, 0, 0, 6, 241, - 17, 0, 1, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 50, 0, - 0, 12, 98, 0, 16, 0, - 19, 0, 0, 0, 246, 15, - 16, 0, 19, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 23, 183, 209, 56, - 23, 183, 209, 56, 0, 0, - 0, 0, 166, 9, 16, 0, - 19, 0, 0, 0, 0, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 6, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 18, 0, - 0, 1, 54, 0, 0, 8, - 98, 0, 16, 0, 19, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 42, 0, - 16, 0, 1, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 6, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 6, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 1, 0, - 0, 7, 18, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 6, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 6, 0, - 0, 0, 49, 0, 0, 7, - 18, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 254, 255, 255, 255, 58, 0, - 16, 0, 19, 0, 0, 0, - 30, 0, 0, 6, 130, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 10, 32, 2, 0, - 85, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 30, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 14, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 254, 66, 42, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 84, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 14, 0, - 0, 10, 18, 0, 16, 0, - 20, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 10, 0, 16, 0, 20, 0, - 0, 0, 51, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 41, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 2, 0, 0, 0, 30, 0, - 0, 10, 50, 0, 16, 0, - 20, 0, 0, 0, 246, 15, - 16, 0, 19, 0, 0, 0, - 2, 64, 0, 0, 12, 0, - 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 166, 0, 0, 7, - 18, 240, 17, 0, 5, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 56, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 166, 0, - 0, 7, 18, 240, 17, 0, - 5, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 166, 0, 0, 6, - 18, 240, 17, 0, 5, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 10, 32, - 2, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 165, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 100, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 41, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 116, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 31, 0, 4, 3, - 42, 0, 16, 0, 19, 0, - 0, 0, 54, 0, 0, 4, - 66, 0, 16, 0, 19, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 33, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 3, 65, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 19, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 168, 0, 0, 9, 18, 224, - 17, 0, 2, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 30, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 4, 0, 0, 22, 0, - 0, 1, 21, 0, 0, 1, - 165, 0, 0, 7, 194, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 16, 0, - 0, 0, 6, 244, 17, 0, - 5, 0, 0, 0, 165, 0, - 0, 7, 50, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 4, 0, 0, 0, - 70, 240, 17, 0, 5, 0, - 0, 0, 165, 0, 0, 7, - 194, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 28, 0, 0, 0, 6, 244, - 17, 0, 5, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 92, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 39, 0, - 0, 7, 34, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 165, 0, 0, 7, - 66, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 100, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 130, 0, - 16, 0, 21, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 33, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 112, - 16, 0, 15, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 22, 0, 0, 0, - 26, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 10, 114, 0, - 16, 0, 28, 0, 0, 0, - 246, 15, 16, 0, 22, 0, - 0, 0, 2, 64, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 37, 23, 0, 0, - 0, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 26, 0, 0, 0, 10, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 26, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 26, 0, 0, 0, 42, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 17, 0, - 0, 8, 130, 0, 16, 0, - 23, 0, 0, 0, 70, 14, - 16, 0, 26, 0, 0, 0, - 70, 158, 144, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 51, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 255, 66, 52, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 27, 0, 0, 5, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 17, 0, - 0, 8, 18, 0, 16, 0, - 26, 0, 0, 0, 70, 14, - 16, 0, 26, 0, 0, 0, - 70, 158, 144, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 50, 0, 0, 9, 18, 0, - 16, 0, 26, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 20, 0, 0, 0, - 51, 0, 0, 7, 18, 0, - 16, 0, 26, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 255, 66, 52, 0, - 0, 7, 18, 0, 16, 0, - 26, 0, 0, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 27, 0, 0, 5, - 18, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 41, 0, 0, 7, - 18, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 23, 0, 0, 0, - 35, 0, 0, 9, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 1, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 129, 0, 60, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 168, 0, 0, 9, - 18, 224, 17, 0, 2, 0, - 0, 0, 26, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 50, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 96, 0, 0, 0, 70, 240, - 17, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 66, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 17, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 54, 0, - 0, 4, 18, 0, 16, 0, - 26, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 33, 0, 0, 7, 130, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 3, 0, - 4, 3, 58, 0, 16, 0, - 21, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 28, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 242, 0, 16, 0, 26, 0, - 0, 0, 6, 0, 16, 0, - 26, 0, 0, 0, 2, 64, - 0, 0, 0, 4, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 37, 23, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 168, 0, 0, 9, 242, 224, - 17, 0, 1, 0, 0, 0, - 58, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 28, 0, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 30, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 1, 64, - 0, 0, 31, 0, 0, 0, - 138, 0, 0, 9, 130, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 5, 0, - 0, 0, 1, 64, 0, 0, - 5, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 85, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 10, 0, 0, 0, 79, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 4, 0, 0, 0, - 58, 0, 16, 0, 21, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 55, 0, - 0, 9, 18, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 38, 0, - 0, 8, 0, 208, 0, 0, - 18, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 35, 0, 0, 9, 18, 0, - 16, 0, 26, 0, 0, 0, - 26, 0, 16, 0, 4, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 41, 0, 0, 7, 34, 0, - 16, 0, 26, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 5, 0, 0, 0, 41, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 5, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 26, 0, - 16, 0, 26, 0, 0, 0, - 84, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 17, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 140, 0, - 0, 10, 18, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 5, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 10, 32, - 2, 0, 54, 0, 0, 5, - 34, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 54, 0, - 0, 5, 194, 0, 16, 0, - 26, 0, 0, 0, 86, 9, - 16, 0, 21, 0, 0, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 18, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 32, 0, - 0, 0, 3, 0, 4, 3, - 10, 0, 16, 0, 28, 0, - 0, 0, 54, 0, 0, 8, - 50, 0, 16, 0, 28, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 66, 0, 16, 0, - 28, 0, 0, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 130, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 28, 0, - 0, 0, 79, 0, 0, 7, - 130, 0, 16, 0, 28, 0, - 0, 0, 42, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 42, 0, 16, 0, 26, 0, - 0, 0, 42, 0, 16, 0, - 28, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 85, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 26, 0, 0, 0, 1, 0, - 0, 10, 242, 0, 16, 0, - 37, 0, 0, 0, 246, 15, - 16, 0, 28, 0, 0, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 8, 0, - 0, 0, 39, 0, 0, 10, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 140, 0, 0, 16, 242, 0, - 16, 0, 37, 0, 0, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 6, 32, 2, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 190, 24, 0, 1, 31, 0, - 4, 3, 10, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 37, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 38, 0, 0, 0, - 26, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 38, 0, 0, 0, - 42, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 26, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 37, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 38, 0, 0, 0, 26, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 38, 0, 0, 0, 26, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 8, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 38, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 42, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 37, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 38, 0, - 0, 0, 42, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 38, 0, - 0, 0, 26, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 38, 0, - 0, 0, 42, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 38, 0, - 0, 0, 42, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 38, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 37, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 13, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 4, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 37, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 38, 0, 0, 0, 26, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 38, 0, 0, 0, 42, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 38, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 167, 0, 0, 9, 130, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 5, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 29, 0, 0, 0, - 10, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 30, 0, 0, 0, - 26, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 33, 0, 0, 0, - 42, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 87, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 2, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 87, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 2, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 87, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 10, 0, 16, 0, 5, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 87, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 26, 0, 16, 0, - 5, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 134, 0, - 0, 5, 130, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 10, 0, 16, 0, - 28, 0, 0, 0, 30, 0, - 0, 10, 98, 0, 16, 0, - 28, 0, 0, 0, 86, 6, - 16, 0, 28, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 32, 0, 0, 0, 0, 0, - 0, 0, 22, 0, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 21, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 26, 0, - 0, 0, 42, 0, 16, 0, - 28, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 34, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 79, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 55, 0, - 0, 9, 34, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 85, 0, - 0, 7, 34, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 26, 0, - 0, 0, 1, 0, 0, 10, - 242, 0, 16, 0, 37, 0, - 0, 0, 86, 5, 16, 0, - 28, 0, 0, 0, 2, 64, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 4, 0, - 0, 0, 8, 0, 0, 0, - 39, 0, 0, 10, 242, 0, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 140, 0, - 0, 16, 242, 0, 16, 0, - 37, 0, 0, 0, 2, 64, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 6, 32, 2, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 37, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 38, 0, - 0, 0, 10, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 38, 0, - 0, 0, 26, 0, 16, 0, - 6, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 38, 0, - 0, 0, 10, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 38, 0, - 0, 0, 42, 0, 16, 0, - 6, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 38, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 22, 0, - 0, 0, 31, 0, 4, 3, - 26, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 37, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 38, 0, 0, 0, 26, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 38, 0, 0, 0, 26, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 8, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 38, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 22, 0, 0, 0, 31, 0, - 4, 3, 42, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 37, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 38, 0, 0, 0, - 42, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 38, 0, 0, 0, - 26, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 38, 0, 0, 0, - 42, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 38, 0, 0, 0, - 42, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 21, 0, 0, 1, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 37, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 38, 0, - 0, 0, 10, 0, 16, 0, - 13, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 38, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 22, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 4, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 37, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 38, 0, 0, 0, 26, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 38, 0, 0, 0, 42, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 38, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 22, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 5, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 18, 0, - 0, 1, 54, 0, 0, 8, - 242, 0, 16, 0, 37, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 1, 87, 0, 0, 7, - 162, 0, 16, 0, 28, 0, - 0, 0, 166, 14, 16, 0, - 2, 0, 0, 0, 6, 4, - 16, 0, 37, 0, 0, 0, - 1, 0, 0, 7, 34, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 87, 0, - 0, 7, 50, 0, 16, 0, - 37, 0, 0, 0, 70, 0, - 16, 0, 5, 0, 0, 0, - 230, 10, 16, 0, 37, 0, - 0, 0, 1, 0, 0, 7, - 34, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 1, 0, 0, 7, 34, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 134, 0, - 0, 5, 34, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 1, 0, 0, 7, 34, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 10, 0, 16, 0, 28, 0, - 0, 0, 21, 0, 0, 1, - 31, 0, 4, 3, 10, 0, - 16, 0, 7, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 11, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 28, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 0, 2, - 10, 32, 2, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 16, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 1, 18, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 1, 0, - 0, 0, 31, 0, 4, 3, - 10, 0, 16, 0, 16, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 14, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 5, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 7, - 34, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 58, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 18, 0, 0, 1, 167, 0, - 0, 9, 34, 0, 16, 0, - 28, 0, 0, 0, 1, 64, - 0, 0, 1, 16, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 2, 18, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 1, 0, 0, 0, 31, 0, - 4, 3, 26, 0, 16, 0, - 16, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 11, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 18, 0, 0, 1, - 167, 0, 0, 9, 34, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 21, 0, 0, 1, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 15, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 1, 0, 0, 0, - 31, 0, 4, 3, 42, 0, - 16, 0, 16, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 15, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 18, 0, - 0, 1, 167, 0, 0, 9, - 34, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 14, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 21, 0, 0, 1, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 15, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 1, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 16, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 10, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 28, 0, - 0, 0, 42, 0, 16, 0, - 14, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 7, - 34, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 18, 0, 0, 1, 167, 0, - 0, 9, 34, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 21, 0, - 0, 1, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 15, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 1, 0, 0, 0, 31, 0, - 4, 3, 10, 0, 16, 0, - 18, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 17, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 18, 0, 0, 1, - 167, 0, 0, 9, 34, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 21, 0, 0, 1, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 15, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 1, 0, 0, 0, - 31, 0, 4, 3, 26, 0, - 16, 0, 18, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 18, 0, - 0, 1, 167, 0, 0, 9, - 34, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 10, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 21, 0, 0, 1, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 15, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 1, 0, - 0, 0, 31, 0, 4, 3, - 42, 0, 16, 0, 18, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 14, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 17, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 7, - 34, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 18, 0, 0, 1, 167, 0, - 0, 9, 34, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 21, 0, - 0, 1, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 15, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 1, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 18, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 18, 0, 0, 1, - 167, 0, 0, 9, 34, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 21, 0, 0, 1, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 15, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 1, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 13, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 18, 0, - 0, 1, 167, 0, 0, 9, - 34, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 14, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 21, 0, 0, 1, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 15, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 54, 0, 0, 5, - 34, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 28, 0, 0, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 29, 0, - 0, 0, 79, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 30, 0, 0, 0, - 42, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 85, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 26, 0, 16, 0, - 26, 0, 0, 0, 1, 0, - 0, 10, 242, 0, 16, 0, - 37, 0, 0, 0, 246, 15, - 16, 0, 33, 0, 0, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 8, 0, - 0, 0, 39, 0, 0, 10, - 242, 0, 16, 0, 38, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 140, 0, 0, 16, 242, 0, - 16, 0, 39, 0, 0, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 6, 32, 2, 0, - 70, 14, 16, 0, 38, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 39, 0, 0, 0, - 190, 24, 0, 1, 31, 0, - 4, 3, 10, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 39, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 39, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 39, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 39, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 40, 0, 0, 0, - 26, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 40, 0, 0, 0, - 42, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 39, 0, 0, 0, - 70, 14, 16, 0, 39, 0, - 0, 0, 70, 14, 16, 0, - 40, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 39, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 26, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 39, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 39, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 39, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 39, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 40, 0, 0, 0, 26, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 40, 0, 0, 0, 26, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 8, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 39, 0, 0, 0, 70, 14, - 16, 0, 39, 0, 0, 0, - 70, 14, 16, 0, 40, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 39, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 42, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 39, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 39, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 39, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 39, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 40, 0, - 0, 0, 42, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 40, 0, - 0, 0, 26, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 40, 0, - 0, 0, 42, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 40, 0, - 0, 0, 42, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 39, 0, - 0, 0, 70, 14, 16, 0, - 39, 0, 0, 0, 70, 14, - 16, 0, 40, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 39, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 39, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 39, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 39, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 39, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 39, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 39, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 39, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 13, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 39, 0, 0, 0, - 70, 14, 16, 0, 39, 0, - 0, 0, 70, 14, 16, 0, - 40, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 39, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 4, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 39, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 39, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 39, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 39, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 40, 0, 0, 0, 26, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 40, 0, 0, 0, 42, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 39, 0, 0, 0, 70, 14, - 16, 0, 39, 0, 0, 0, - 70, 14, 16, 0, 40, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 39, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 167, 0, 0, 9, 130, 0, - 16, 0, 35, 0, 0, 0, - 42, 0, 16, 0, 5, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 140, 0, 0, 11, 130, 0, - 16, 0, 33, 0, 0, 0, - 1, 64, 0, 0, 4, 0, - 0, 0, 1, 64, 0, 0, - 5, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 33, 0, - 0, 0, 26, 0, 16, 0, - 11, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 1, 64, 0, 0, - 0, 16, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 29, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 87, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 32, 0, 0, 10, 114, 0, - 16, 0, 38, 0, 0, 0, - 150, 7, 16, 0, 38, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 0, - 0, 7, 18, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 38, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 87, 0, 0, 7, 18, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 38, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 87, 0, 0, 7, - 18, 0, 16, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 38, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 138, 0, - 0, 8, 130, 0, 16, 0, - 29, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 134, 0, 0, 5, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 168, 0, - 0, 9, 18, 224, 17, 0, - 2, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 10, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 29, 0, 0, 0, - 42, 0, 16, 0, 11, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 87, 0, 0, 7, 130, 0, - 16, 0, 30, 0, 0, 0, - 42, 0, 16, 0, 2, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 87, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 2, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 87, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 10, 0, 16, 0, 5, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 87, 0, 0, 7, - 130, 0, 16, 0, 33, 0, - 0, 0, 26, 0, 16, 0, - 5, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 134, 0, - 0, 5, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 11, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 21, 0, - 0, 1, 30, 0, 0, 10, - 162, 0, 16, 0, 28, 0, - 0, 0, 86, 13, 16, 0, - 28, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 0, - 22, 0, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 21, 0, 0, 0, 79, 0, - 0, 7, 34, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 42, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 0, 128, 131, 153, 25, 0, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 224, 17, 0, 2, 0, - 0, 0, 55, 0, 0, 9, - 130, 0, 16, 0, 29, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 85, 0, 0, 7, - 130, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 26, 0, - 16, 0, 26, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 1, 0, 0, 10, 242, 0, - 16, 0, 37, 0, 0, 0, - 246, 15, 16, 0, 30, 0, - 0, 0, 2, 64, 0, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 4, 0, 0, 0, - 8, 0, 0, 0, 39, 0, - 0, 10, 242, 0, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 140, 0, 0, 16, - 242, 0, 16, 0, 37, 0, - 0, 0, 2, 64, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 6, 32, - 2, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 22, 0, 0, 0, 31, 0, - 4, 3, 10, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 37, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 38, 0, 0, 0, - 26, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 38, 0, 0, 0, - 42, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 21, 0, 0, 1, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 31, 0, 4, 3, 26, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 37, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 38, 0, - 0, 0, 26, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 6, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 38, 0, - 0, 0, 26, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 38, 0, - 0, 0, 10, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 38, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 22, 0, - 0, 0, 31, 0, 4, 3, - 42, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 37, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 38, 0, 0, 0, 42, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 38, 0, 0, 0, 26, 0, - 16, 0, 8, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 38, 0, 0, 0, 42, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 38, 0, 0, 0, 42, 0, - 16, 0, 8, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 38, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 22, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 37, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 13, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 21, 0, 0, 1, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 4, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 37, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 38, 0, - 0, 0, 10, 0, 16, 0, - 6, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 38, 0, - 0, 0, 26, 0, 16, 0, - 13, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 38, 0, - 0, 0, 10, 0, 16, 0, - 14, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 38, 0, - 0, 0, 42, 0, 16, 0, - 13, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 38, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 22, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 5, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 10, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 10, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 10, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 1, 0, 0, 10, - 242, 0, 16, 0, 38, 0, - 0, 0, 246, 15, 16, 0, - 30, 0, 0, 0, 2, 64, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 4, 0, - 0, 0, 8, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 10, 0, 16, 0, 38, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 87, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 39, 0, 0, 10, - 114, 0, 16, 0, 38, 0, - 0, 0, 150, 7, 16, 0, - 38, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 32, 0, 0, 10, 114, 0, - 16, 0, 38, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 0, - 0, 7, 114, 0, 16, 0, - 38, 0, 0, 0, 150, 7, - 16, 0, 37, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 10, 0, - 16, 0, 38, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 33, 0, 0, 0, - 26, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 42, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 140, 0, 0, 11, - 130, 0, 16, 0, 30, 0, - 0, 0, 1, 64, 0, 0, - 4, 0, 0, 0, 1, 64, - 0, 0, 5, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 30, 0, 0, 0, 26, 0, - 16, 0, 11, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 30, 0, 0, 0, 1, 64, - 0, 0, 0, 16, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 138, 0, 0, 8, 130, 0, - 16, 0, 33, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 134, 0, 0, 5, - 130, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 18, 0, 0, 1, - 54, 0, 0, 8, 242, 0, - 16, 0, 37, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 30, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 1, 31, 0, 4, 3, - 26, 0, 16, 0, 28, 0, - 0, 0, 30, 0, 0, 7, - 34, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 168, 0, 0, 9, 18, 224, - 17, 0, 2, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 22, 0, - 0, 0, 31, 0, 4, 3, - 10, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 28, 0, - 0, 0, 42, 0, 16, 0, - 11, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 87, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 42, 0, 16, 0, - 2, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 87, 0, 0, 7, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 2, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 87, 0, 0, 7, - 50, 0, 16, 0, 37, 0, - 0, 0, 70, 0, 16, 0, - 5, 0, 0, 0, 230, 10, - 16, 0, 37, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 134, 0, 0, 5, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 11, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 21, 0, - 0, 1, 30, 0, 0, 7, - 34, 0, 16, 0, 26, 0, - 0, 0, 26, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 4, 0, 0, 0, - 54, 0, 0, 5, 34, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 26, 0, - 0, 0, 42, 0, 16, 0, - 26, 0, 0, 0, 54, 0, - 0, 5, 66, 0, 16, 0, - 26, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 22, 0, 0, 1, 54, 0, - 0, 4, 18, 0, 16, 0, - 21, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 33, 0, 0, 7, 66, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 3, 0, - 4, 3, 42, 0, 16, 0, - 21, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 26, 0, 16, 0, 21, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 0, 128, 131, 153, - 25, 0, 130, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 224, 17, 0, - 2, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 167, 0, 0, 139, - 2, 35, 0, 128, 131, 153, - 25, 0, 66, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 224, 17, 0, - 2, 0, 0, 0, 42, 0, - 0, 10, 194, 0, 16, 0, - 21, 0, 0, 0, 166, 14, - 16, 0, 21, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 16, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 55, 0, 0, 9, 66, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 39, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 22, 0, 0, 0, 30, 0, - 0, 7, 194, 0, 16, 0, - 21, 0, 0, 0, 86, 5, - 16, 0, 19, 0, 0, 0, - 166, 14, 16, 0, 21, 0, - 0, 0, 168, 0, 0, 9, - 18, 224, 17, 0, 2, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 30, 0, 0, 7, - 66, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 168, 0, 0, 9, 18, 224, - 17, 0, 2, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 21, 0, 0, 1, 30, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 4, - 0, 0, 22, 0, 0, 1, - 165, 0, 0, 7, 50, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 96, 0, - 0, 0, 70, 240, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 4, 18, 0, 16, 0, - 26, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 33, 0, 0, 7, 66, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 3, 0, - 4, 3, 42, 0, 16, 0, - 21, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 21, 0, 0, 0, 26, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 0, 128, 131, 153, - 25, 0, 66, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 224, 17, 0, - 2, 0, 0, 0, 1, 0, - 0, 7, 66, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 0, 0, 30, 0, 0, 7, - 66, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 238, 17, 0, 1, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 30, 0, 0, 10, - 242, 0, 16, 0, 26, 0, - 0, 0, 6, 0, 16, 0, - 26, 0, 0, 0, 2, 64, - 0, 0, 0, 4, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 37, 23, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 84, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 56, 0, 0, 7, 34, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 165, 0, - 0, 7, 66, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 100, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 112, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 54, 0, 0, 4, 130, 0, - 16, 0, 22, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 33, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 10, 242, 0, 16, 0, - 37, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 2, 64, 0, 0, 183, 7, - 0, 0, 110, 15, 0, 0, - 37, 23, 0, 0, 0, 4, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 26, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 26, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 7, - 34, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 114, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 114, 16, 0, 14, 0, - 0, 0, 17, 0, 0, 8, - 34, 0, 16, 0, 28, 0, - 0, 0, 70, 14, 16, 0, - 26, 0, 0, 0, 70, 158, - 144, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 50, 0, - 0, 9, 34, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 51, 0, - 0, 7, 34, 0, 16, 0, - 28, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 255, 66, 52, 0, 0, 7, - 34, 0, 16, 0, 28, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 27, 0, 0, 5, 34, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 17, 0, 0, 8, - 130, 0, 16, 0, 29, 0, - 0, 0, 70, 14, 16, 0, - 26, 0, 0, 0, 70, 158, - 144, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 51, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 255, 66, 52, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 27, 0, 0, 5, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 35, 0, 0, 9, - 34, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 1, 64, - 0, 0, 128, 0, 0, 0, - 26, 0, 16, 0, 28, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 1, 64, - 0, 0, 0, 1, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 54, 0, - 0, 8, 114, 0, 16, 0, - 38, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 33, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 54, 0, 0, 5, - 130, 0, 16, 0, 35, 0, - 0, 0, 26, 0, 16, 0, - 28, 0, 0, 0, 48, 0, - 0, 1, 34, 0, 0, 7, - 130, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 38, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 38, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 18, 0, - 16, 0, 39, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 30, 0, 0, 10, 226, 0, - 16, 0, 39, 0, 0, 0, - 246, 15, 16, 0, 38, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 38, 0, 0, 0, - 26, 0, 16, 0, 39, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 0, 128, 131, 153, 25, 0, - 34, 0, 16, 0, 39, 0, - 0, 0, 42, 0, 16, 0, - 39, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 224, 17, 0, 2, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 0, 128, 131, 153, - 25, 0, 66, 0, 16, 0, - 39, 0, 0, 0, 58, 0, - 16, 0, 39, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 224, 17, 0, - 2, 0, 0, 0, 84, 0, - 0, 7, 18, 0, 16, 0, - 39, 0, 0, 0, 58, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 39, 0, - 0, 0, 84, 0, 0, 7, - 18, 0, 16, 0, 39, 0, - 0, 0, 26, 0, 16, 0, - 39, 0, 0, 0, 10, 0, - 16, 0, 39, 0, 0, 0, - 36, 0, 0, 7, 130, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 26, 0, 16, 0, - 39, 0, 0, 0, 36, 0, - 0, 7, 130, 0, 16, 0, - 38, 0, 0, 0, 42, 0, - 16, 0, 39, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 36, 0, 0, 7, - 130, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 38, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 226, 0, - 16, 0, 39, 0, 0, 0, - 6, 9, 16, 0, 38, 0, - 0, 0, 54, 0, 0, 5, - 18, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 54, 0, - 0, 5, 34, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 39, 0, 0, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 66, 0, 16, 0, - 40, 0, 0, 0, 26, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 3, 0, 4, 3, - 42, 0, 16, 0, 40, 0, - 0, 0, 39, 0, 0, 7, - 66, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 40, 0, 0, 0, - 31, 0, 4, 3, 42, 0, - 16, 0, 40, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 41, 0, 0, 0, - 26, 0, 16, 0, 40, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 10, 114, 0, - 16, 0, 42, 0, 0, 0, - 86, 5, 16, 0, 40, 0, - 0, 0, 2, 64, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 37, 23, 0, 0, - 0, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 41, 0, 0, 0, 10, 0, - 16, 0, 42, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 41, 0, 0, 0, 26, 0, - 16, 0, 42, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 40, 0, 0, 0, 42, 0, - 16, 0, 42, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 41, 0, 0, 0, 70, 2, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 41, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 70, 2, 16, 0, - 41, 0, 0, 0, 49, 0, - 0, 7, 130, 0, 16, 0, - 41, 0, 0, 0, 26, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 40, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 41, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 41, 0, - 0, 0, 26, 0, 16, 0, - 40, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 5, 34, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 41, 0, - 0, 0, 7, 0, 0, 1, - 21, 0, 0, 1, 165, 0, - 0, 7, 130, 0, 16, 0, - 41, 0, 0, 0, 1, 64, - 0, 0, 112, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 39, 0, 0, 7, - 18, 0, 16, 0, 42, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 31, 0, 4, 3, 10, 0, - 16, 0, 42, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 42, 0, 0, 0, - 1, 64, 0, 0, 100, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 42, 0, 0, 0, 26, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 42, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 0, 128, 131, 153, - 25, 0, 18, 0, 16, 0, - 42, 0, 0, 0, 10, 0, - 16, 0, 42, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 224, 17, 0, - 2, 0, 0, 0, 1, 0, - 0, 7, 18, 0, 16, 0, - 42, 0, 0, 0, 10, 0, - 16, 0, 42, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 41, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 10, 0, - 16, 0, 42, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 114, 0, 16, 0, 42, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 114, 16, 0, 14, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 42, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 42, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 41, 0, 0, 0, 70, 2, - 16, 0, 42, 0, 0, 0, - 70, 2, 16, 0, 42, 0, - 0, 0, 29, 0, 0, 7, - 18, 0, 16, 0, 42, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 41, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 42, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 42, 0, 0, 0, - 26, 0, 16, 0, 40, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 5, 34, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 42, 0, 0, 0, - 7, 0, 0, 1, 21, 0, - 0, 1, 0, 0, 0, 7, - 130, 0, 16, 0, 41, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 14, 0, 0, 7, 130, 0, - 16, 0, 41, 0, 0, 0, - 26, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 68, 0, - 0, 5, 130, 0, 16, 0, - 41, 0, 0, 0, 58, 0, - 16, 0, 41, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 41, 0, 0, 0, - 58, 0, 16, 0, 41, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 191, 51, 0, - 0, 7, 130, 0, 16, 0, - 41, 0, 0, 0, 58, 0, - 16, 0, 41, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 18, 0, 0, 1, - 54, 0, 0, 5, 130, 0, - 16, 0, 41, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 21, 0, 0, 1, - 0, 0, 0, 7, 130, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 40, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 68, 0, - 0, 5, 130, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 40, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 191, - 52, 0, 0, 7, 130, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 40, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 56, 0, - 0, 7, 18, 0, 16, 0, - 42, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 40, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 41, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 10, 0, - 16, 0, 42, 0, 0, 0, - 0, 0, 0, 7, 66, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 42, 0, 16, 0, - 40, 0, 0, 0, 14, 0, - 0, 7, 66, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 41, 0, 0, 0, - 42, 0, 16, 0, 40, 0, - 0, 0, 50, 0, 0, 9, - 226, 0, 16, 0, 39, 0, - 0, 0, 166, 10, 16, 0, - 40, 0, 0, 0, 6, 9, - 16, 0, 41, 0, 0, 0, - 86, 14, 16, 0, 39, 0, - 0, 0, 0, 0, 0, 7, - 18, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 40, 0, 0, 0, - 21, 0, 0, 1, 30, 0, - 0, 7, 34, 0, 16, 0, - 40, 0, 0, 0, 26, 0, - 16, 0, 40, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 22, 0, 0, 1, - 54, 0, 0, 5, 114, 0, - 16, 0, 38, 0, 0, 0, - 150, 7, 16, 0, 39, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 33, 0, - 0, 0, 10, 0, 16, 0, - 40, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 1, 64, 0, 0, 128, 0, - 0, 0, 22, 0, 0, 1, - 165, 0, 0, 7, 18, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 72, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 56, 0, - 0, 7, 18, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 10, 0, 16, 0, 26, 0, - 0, 0, 14, 0, 0, 7, - 18, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 96, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 26, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 114, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 226, 17, 0, - 1, 0, 0, 0, 50, 0, - 0, 9, 210, 0, 16, 0, - 26, 0, 0, 0, 6, 9, - 16, 0, 38, 0, 0, 0, - 6, 0, 16, 0, 26, 0, - 0, 0, 6, 9, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 114, 224, 17, 0, - 1, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 134, 3, 16, 0, - 26, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 96, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 18, 0, - 16, 0, 20, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 33, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 19, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 1, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 30, 0, 0, 10, 242, 0, - 16, 0, 20, 0, 0, 0, - 6, 0, 16, 0, 20, 0, - 0, 0, 2, 64, 0, 0, - 0, 4, 0, 0, 183, 7, - 0, 0, 110, 15, 0, 0, - 37, 23, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 22, 0, - 0, 1, 165, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 100, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 66, 0, - 16, 0, 19, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 33, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 19, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 85, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 168, 0, 0, 9, - 18, 224, 17, 0, 2, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 30, 0, 0, 7, - 18, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 168, 0, 0, 9, 18, 224, - 17, 0, 2, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 30, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 4, 0, 0, 22, 0, - 0, 1, 21, 0, 0, 1, - 31, 0, 0, 2, 10, 32, - 2, 0, 165, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 8, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 56, 0, 0, 7, 18, 0, - 16, 0, 17, 0, 0, 0, - 10, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 122, 68, 28, 0, - 0, 5, 18, 0, 16, 0, - 17, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 83, 0, 0, 7, 18, 0, - 16, 0, 17, 0, 0, 0, - 10, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 165, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 104, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 166, 0, 0, 7, 18, 240, - 17, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 104, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 165, 0, 0, 7, 18, 0, - 16, 0, 17, 0, 0, 0, - 1, 64, 0, 0, 104, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 165, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 104, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 80, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 17, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 17, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 18, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 34, 0, - 16, 0, 19, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 3, 0, 4, 3, 42, 0, - 16, 0, 19, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 10, 114, 0, - 16, 0, 21, 0, 0, 0, - 86, 5, 16, 0, 19, 0, - 0, 0, 2, 64, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 178, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 232, 17, 0, - 0, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 20, 0, 0, 0, 70, 2, - 16, 0, 20, 0, 0, 0, - 70, 3, 16, 128, 65, 0, - 0, 0, 21, 0, 0, 0, - 52, 0, 0, 9, 66, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 128, 129, 0, - 0, 0, 20, 0, 0, 0, - 10, 0, 16, 128, 129, 0, - 0, 0, 20, 0, 0, 0, - 52, 0, 0, 8, 66, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 128, 129, 0, - 0, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 52, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 54, 0, 0, 5, 34, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 22, 0, 0, 1, - 31, 0, 0, 2, 10, 32, - 2, 0, 165, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 100, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 17, 0, 0, 0, - 10, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 166, 0, - 0, 7, 18, 240, 17, 0, - 1, 0, 0, 0, 1, 64, - 0, 0, 100, 0, 0, 0, - 10, 0, 16, 0, 17, 0, - 0, 0, 165, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 104, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 104, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 30, 0, - 0, 8, 18, 0, 16, 0, - 17, 0, 0, 0, 10, 0, - 16, 128, 65, 0, 0, 0, - 17, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 166, 0, 0, 7, 18, 240, - 17, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 104, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 21, 0, - 0, 1, 165, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 112, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 8, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 56, 0, - 0, 7, 18, 0, 16, 0, - 17, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 49, 0, 0, 7, - 18, 0, 16, 0, 17, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 17, 0, 0, 0, - 166, 0, 0, 7, 18, 240, - 17, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 100, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 30, 0, 0, 7, 34, 0, - 16, 0, 15, 0, 0, 0, - 26, 0, 16, 0, 15, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 22, 0, - 0, 1, 190, 24, 0, 1, - 165, 0, 0, 7, 98, 0, - 16, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 241, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 4, 18, 0, 16, 0, - 1, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 80, 0, 0, 7, 130, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 1, 0, - 0, 0, 26, 0, 16, 0, - 0, 0, 0, 0, 3, 0, - 4, 3, 58, 0, 16, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 1, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 2, 0, - 0, 0, 10, 0, 16, 0, - 1, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 242, 0, 16, 0, 1, 0, - 0, 0, 6, 0, 16, 0, - 1, 0, 0, 0, 2, 64, - 0, 0, 0, 4, 0, 0, - 183, 7, 0, 0, 110, 15, - 0, 0, 37, 23, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 2, 0, 0, 0, - 26, 0, 16, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 2, 0, 0, 0, - 42, 0, 16, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 2, 0, 0, 0, - 58, 0, 16, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 168, 0, 0, 9, 242, 224, - 17, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 2, 0, 0, 0, - 22, 0, 0, 1, 18, 0, - 0, 1, 165, 0, 0, 7, - 34, 0, 16, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 4, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 59, 0, 0, 4, 66, 0, - 16, 0, 0, 0, 0, 0, - 10, 32, 2, 0, 1, 0, - 0, 7, 66, 0, 16, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 3, 0, - 0, 0, 79, 0, 0, 9, - 242, 0, 16, 0, 1, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 192, 0, - 0, 0, 176, 0, 0, 0, - 3, 0, 0, 0, 0, 2, - 0, 0, 1, 0, 0, 9, - 242, 0, 16, 0, 2, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 32, 0, - 0, 0, 31, 0, 0, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 55, 0, 0, 9, - 130, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 191, - 1, 64, 0, 0, 0, 0, - 128, 63, 30, 0, 0, 9, - 242, 0, 16, 0, 3, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 16, 0, - 0, 0, 8, 0, 0, 0, - 4, 0, 0, 0, 2, 0, - 0, 0, 32, 0, 0, 7, - 18, 0, 16, 0, 2, 0, - 0, 0, 26, 0, 16, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 7, 18, 0, - 16, 0, 2, 0, 0, 0, - 10, 0, 16, 0, 1, 0, - 0, 0, 10, 0, 16, 0, - 2, 0, 0, 0, 85, 0, - 0, 9, 50, 0, 16, 0, - 4, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 6, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 41, 0, - 0, 7, 66, 0, 16, 0, - 4, 0, 0, 0, 26, 0, - 16, 0, 4, 0, 0, 0, - 1, 64, 0, 0, 2, 0, - 0, 0, 41, 0, 0, 6, - 130, 0, 16, 0, 4, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 3, 0, - 0, 0, 30, 0, 0, 10, - 194, 0, 16, 0, 4, 0, - 0, 0, 166, 14, 16, 0, - 4, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 76, 0, - 0, 0, 76, 0, 0, 0, - 30, 0, 0, 7, 66, 0, - 16, 0, 2, 0, 0, 0, - 42, 0, 16, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 39, 0, - 0, 7, 130, 0, 16, 0, - 2, 0, 0, 0, 58, 0, - 16, 0, 2, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 7, - 130, 0, 16, 0, 2, 0, - 0, 0, 58, 0, 16, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 9, 114, 0, - 16, 0, 5, 0, 0, 0, - 6, 32, 2, 0, 2, 64, - 0, 0, 4, 0, 0, 0, - 8, 0, 0, 0, 224, 3, - 0, 0, 0, 0, 0, 0, - 39, 0, 0, 10, 50, 0, - 16, 0, 5, 0, 0, 0, - 70, 0, 16, 0, 5, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 0, - 0, 10, 50, 0, 16, 0, - 5, 0, 0, 0, 70, 0, - 16, 0, 5, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 9, - 242, 0, 16, 0, 6, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 16, 4, 0, 0, - 16, 12, 0, 0, 8, 4, - 0, 0, 79, 0, 0, 10, - 242, 0, 16, 0, 7, 0, - 0, 0, 86, 5, 16, 0, - 2, 0, 0, 0, 2, 64, - 0, 0, 16, 0, 0, 0, - 8, 0, 0, 0, 4, 0, - 0, 0, 2, 0, 0, 0, - 79, 0, 0, 7, 130, 0, - 16, 0, 5, 0, 0, 0, - 26, 0, 16, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 30, 0, - 0, 9, 242, 0, 16, 0, - 8, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 8, 12, 0, 0, 4, 4, - 0, 0, 4, 12, 0, 0, - 2, 4, 0, 0, 30, 0, - 0, 10, 242, 0, 16, 0, - 9, 0, 0, 0, 70, 14, - 16, 0, 3, 0, 0, 0, - 2, 64, 0, 0, 0, 8, - 0, 0, 0, 8, 0, 0, - 0, 8, 0, 0, 0, 8, - 0, 0, 30, 0, 0, 10, - 114, 0, 16, 0, 10, 0, - 0, 0, 166, 10, 16, 0, - 5, 0, 0, 0, 2, 64, - 0, 0, 0, 4, 0, 0, - 0, 8, 0, 0, 0, 12, - 0, 0, 0, 0, 0, 0, - 30, 0, 0, 10, 50, 0, - 16, 0, 11, 0, 0, 0, - 86, 5, 16, 0, 4, 0, - 0, 0, 2, 64, 0, 0, - 1, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 140, 0, - 0, 19, 242, 0, 16, 0, - 12, 0, 0, 0, 2, 64, - 0, 0, 10, 0, 0, 0, - 11, 0, 0, 0, 10, 0, - 0, 0, 5, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 0, 4, - 0, 0, 0, 8, 0, 0, - 0, 12, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 7, - 82, 0, 16, 0, 11, 0, - 0, 0, 6, 1, 16, 0, - 11, 0, 0, 0, 246, 15, - 16, 0, 12, 0, 0, 0, - 30, 0, 0, 9, 242, 0, - 16, 0, 13, 0, 0, 0, - 6, 32, 2, 0, 2, 64, - 0, 0, 2, 12, 0, 0, - 1, 4, 0, 0, 1, 12, - 0, 0, 2, 2, 0, 0, - 30, 0, 0, 10, 50, 0, - 16, 0, 14, 0, 0, 0, - 6, 0, 16, 0, 6, 0, - 0, 0, 2, 64, 0, 0, - 0, 8, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 6, 130, 0, 16, 0, - 10, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 16, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 11, 0, 0, 0, 58, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 16, - 0, 0, 30, 0, 0, 9, - 242, 0, 16, 0, 15, 0, - 0, 0, 6, 32, 2, 0, - 2, 64, 0, 0, 1, 16, - 0, 0, 0, 2, 0, 0, - 2, 18, 0, 0, 253, 15, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 12, 0, - 0, 0, 26, 0, 16, 0, - 15, 0, 0, 0, 1, 64, - 0, 0, 0, 16, 0, 0, - 80, 0, 0, 9, 242, 0, - 16, 0, 16, 0, 0, 0, - 6, 32, 2, 0, 2, 64, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 4, 0, - 0, 0, 8, 0, 0, 0, - 30, 0, 0, 9, 242, 0, - 16, 0, 17, 0, 0, 0, - 6, 32, 2, 0, 2, 64, - 0, 0, 250, 1, 0, 0, - 241, 15, 0, 0, 226, 1, - 0, 0, 193, 15, 0, 0, - 30, 0, 0, 10, 194, 0, - 16, 0, 14, 0, 0, 0, - 6, 8, 16, 0, 17, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, - 0, 16, 0, 0, 80, 0, - 0, 9, 242, 0, 16, 0, - 18, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 16, 0, 0, 0, 32, 0, - 0, 0, 64, 0, 0, 0, - 128, 0, 0, 0, 30, 0, - 0, 9, 82, 0, 16, 0, - 17, 0, 0, 0, 6, 32, - 2, 0, 2, 64, 0, 0, - 130, 1, 0, 0, 0, 0, - 0, 0, 1, 15, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 13, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 1, 64, 0, 0, 0, 16, - 0, 0, 80, 0, 0, 6, - 34, 0, 16, 0, 15, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 1, - 0, 0, 30, 0, 0, 10, - 82, 0, 16, 0, 11, 0, - 0, 0, 6, 2, 16, 0, - 11, 0, 0, 0, 2, 64, - 0, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 18, 0, - 16, 0, 17, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 48, 0, 0, 1, - 165, 0, 0, 7, 18, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 16, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 80, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 17, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 3, 0, 4, 3, - 26, 0, 16, 0, 19, 0, - 0, 0, 86, 0, 0, 5, - 34, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 0, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 86, 0, 0, 5, - 18, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 14, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 31, 0, 0, 2, - 10, 32, 2, 0, 165, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 12, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 30, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 17, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 3, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 2, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 3, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 16, 0, - 0, 0, 70, 126, 16, 0, - 2, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 3, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 22, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 32, 0, 0, 0, 70, 126, - 16, 0, 2, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 3, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 48, 0, 0, 0, - 70, 126, 16, 0, 2, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 3, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 24, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 64, 0, - 0, 0, 70, 126, 16, 0, - 2, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 3, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 25, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 80, 0, 0, 0, 70, 126, - 16, 0, 2, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 3, 128, 131, 153, 25, 0, - 66, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 96, 0, 0, 0, - 6, 112, 16, 0, 2, 0, - 0, 0, 166, 0, 0, 7, - 242, 240, 17, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 20, 0, 0, 0, - 166, 0, 0, 7, 242, 240, - 17, 0, 2, 0, 0, 0, - 1, 64, 0, 0, 16, 0, - 0, 0, 70, 14, 16, 0, - 21, 0, 0, 0, 166, 0, - 0, 7, 242, 240, 17, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 32, 0, 0, 0, - 70, 14, 16, 0, 22, 0, - 0, 0, 166, 0, 0, 7, - 242, 240, 17, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 48, 0, 0, 0, 70, 14, - 16, 0, 23, 0, 0, 0, - 166, 0, 0, 7, 242, 240, - 17, 0, 2, 0, 0, 0, - 1, 64, 0, 0, 64, 0, - 0, 0, 70, 14, 16, 0, - 24, 0, 0, 0, 166, 0, - 0, 7, 242, 240, 17, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 80, 0, 0, 0, - 70, 14, 16, 0, 25, 0, - 0, 0, 166, 0, 0, 7, - 18, 240, 17, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 96, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 114, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 12, 0, - 0, 0, 70, 242, 17, 0, - 2, 0, 0, 0, 165, 0, - 0, 7, 242, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 60, 0, 0, 0, - 70, 254, 17, 0, 2, 0, - 0, 0, 165, 0, 0, 7, - 242, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 24, 0, 0, 0, 70, 254, - 17, 0, 2, 0, 0, 0, - 165, 0, 0, 7, 242, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 76, 0, - 0, 0, 70, 254, 17, 0, - 2, 0, 0, 0, 165, 0, - 0, 7, 242, 0, 16, 0, - 24, 0, 0, 0, 1, 64, - 0, 0, 40, 0, 0, 0, - 70, 254, 17, 0, 2, 0, - 0, 0, 165, 0, 0, 7, - 50, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 92, 0, 0, 0, 70, 240, - 17, 0, 2, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 56, 0, - 0, 0, 6, 240, 17, 0, - 2, 0, 0, 0, 165, 0, - 0, 7, 242, 0, 16, 0, - 26, 0, 0, 0, 1, 64, - 0, 0, 12, 0, 0, 0, - 70, 254, 17, 0, 2, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 36, 0, 0, 0, 6, 240, - 17, 0, 2, 0, 0, 0, - 165, 0, 0, 7, 66, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 48, 0, - 0, 0, 6, 240, 17, 0, - 2, 0, 0, 0, 54, 0, - 0, 4, 130, 0, 16, 0, - 25, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 80, 0, 0, 7, 18, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 3, 0, - 4, 3, 10, 0, 16, 0, - 27, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 28, 0, 0, 0, 10, 0, - 16, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 238, 17, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 27, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 29, 0, 0, 0, 26, 0, - 16, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 238, 17, 0, - 0, 0, 0, 0, 24, 0, - 0, 7, 66, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 55, 0, 0, 9, - 130, 0, 16, 0, 28, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 49, 0, 0, 7, - 66, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 31, 0, 4, 3, 42, 0, - 16, 0, 27, 0, 0, 0, - 31, 0, 4, 3, 26, 0, - 16, 0, 25, 0, 0, 0, - 0, 0, 0, 7, 114, 0, - 16, 0, 30, 0, 0, 0, - 70, 2, 16, 0, 20, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 50, 0, - 0, 9, 194, 0, 16, 0, - 27, 0, 0, 0, 6, 0, - 16, 0, 28, 0, 0, 0, - 6, 12, 16, 0, 21, 0, - 0, 0, 6, 4, 16, 0, - 30, 0, 0, 0, 50, 0, - 0, 9, 194, 0, 16, 0, - 27, 0, 0, 0, 6, 0, - 16, 0, 29, 0, 0, 0, - 6, 12, 16, 0, 22, 0, - 0, 0, 166, 14, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 29, 0, 0, 0, - 26, 0, 16, 0, 22, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 18, 0, 16, 0, - 30, 0, 0, 0, 42, 0, - 16, 0, 29, 0, 0, 0, - 42, 0, 16, 0, 22, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 10, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 29, 0, 0, 0, - 10, 0, 16, 0, 24, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 34, 0, 16, 0, - 30, 0, 0, 0, 42, 0, - 16, 0, 29, 0, 0, 0, - 26, 0, 16, 0, 24, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 10, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 30, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 10, 0, - 16, 0, 29, 0, 0, 0, - 42, 0, 16, 0, 24, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 24, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 28, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 66, 0, 16, 0, - 27, 0, 0, 0, 42, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 27, 0, 0, 0, 18, 0, - 0, 1, 0, 0, 0, 8, - 114, 0, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 29, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 27, 0, 0, 0, 10, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 0, 0, - 0, 7, 18, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 10, 0, 16, 0, 28, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 27, 0, - 0, 0, 26, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 26, 0, - 0, 0, 0, 0, 0, 7, - 34, 0, 16, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 28, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 27, 0, 0, 0, - 42, 0, 16, 0, 31, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 42, 0, - 16, 0, 26, 0, 0, 0, - 0, 0, 0, 7, 66, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 42, 0, 16, 0, - 28, 0, 0, 0, 21, 0, - 0, 1, 165, 0, 0, 7, - 114, 0, 16, 0, 31, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 242, - 17, 0, 2, 0, 0, 0, - 0, 0, 0, 7, 114, 0, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 28, 0, - 0, 0, 70, 2, 16, 0, - 31, 0, 0, 0, 54, 0, - 0, 5, 50, 0, 16, 0, - 28, 0, 0, 0, 70, 0, - 16, 0, 30, 0, 0, 0, - 54, 0, 0, 5, 66, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 27, 0, - 0, 0, 18, 0, 0, 1, - 54, 0, 0, 5, 114, 0, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 28, 0, - 0, 0, 21, 0, 0, 1, - 168, 0, 0, 9, 242, 224, - 17, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 28, 0, 0, 0, - 168, 0, 0, 9, 242, 224, - 17, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 29, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 4, 0, 0, 22, 0, - 0, 1, 165, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 44, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 190, 24, 0, 1, 165, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 8, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 41, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 2, 0, - 0, 0, 54, 0, 0, 4, - 66, 0, 16, 0, 20, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 130, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 20, 0, - 0, 0, 85, 0, 0, 7, - 130, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 2, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 0, 0, 0, 0, - 49, 0, 0, 7, 18, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 31, 0, - 4, 3, 10, 0, 16, 0, - 22, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 22, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 20, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 13, 0, 0, 0, 50, 0, - 0, 9, 242, 0, 16, 0, - 21, 0, 0, 0, 70, 14, - 16, 0, 22, 0, 0, 0, - 246, 15, 16, 0, 19, 0, - 0, 0, 70, 14, 16, 0, - 21, 0, 0, 0, 168, 0, - 0, 9, 242, 224, 17, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 21, 0, 0, 0, 21, 0, - 0, 1, 30, 0, 0, 7, - 66, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 28, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 39, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 31, 0, - 4, 3, 42, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 194, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 36, 0, 0, 0, - 6, 244, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 114, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 24, 0, 0, 0, 70, 242, - 17, 0, 1, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 4, 18, 0, 16, 0, - 21, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 80, 0, 0, 7, 34, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 3, 0, - 4, 3, 26, 0, 16, 0, - 21, 0, 0, 0, 30, 0, - 0, 7, 98, 0, 16, 0, - 21, 0, 0, 0, 86, 6, - 16, 0, 20, 0, 0, 0, - 6, 0, 16, 0, 21, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 11, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 11, 0, 0, 0, - 0, 0, 0, 8, 242, 0, - 16, 0, 23, 0, 0, 0, - 70, 14, 16, 128, 65, 0, - 0, 0, 22, 0, 0, 0, - 70, 14, 16, 0, 23, 0, - 0, 0, 50, 0, 0, 9, - 242, 0, 16, 0, 22, 0, - 0, 0, 70, 14, 16, 0, - 23, 0, 0, 0, 6, 0, - 16, 0, 19, 0, 0, 0, - 70, 14, 16, 0, 22, 0, - 0, 0, 30, 0, 0, 7, - 34, 0, 16, 0, 21, 0, - 0, 0, 26, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 23, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 238, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 22, 0, - 0, 0, 70, 2, 16, 0, - 22, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 23, 0, 0, 0, 16, 0, - 0, 7, 66, 0, 16, 0, - 21, 0, 0, 0, 70, 2, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 22, 0, - 0, 0, 0, 0, 0, 7, - 66, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 50, 0, 0, 11, 130, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 42, 0, 16, 128, - 65, 0, 0, 0, 19, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 19, 0, - 0, 0, 51, 0, 0, 7, - 130, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 68, 0, 0, 5, 66, 0, - 16, 0, 21, 0, 0, 0, - 42, 0, 16, 0, 21, 0, - 0, 0, 50, 0, 0, 9, - 66, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 21, 0, 0, 0, 42, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 52, 0, 0, 7, - 66, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 56, 0, 0, 7, 66, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 22, 0, 0, 0, 166, 10, - 16, 0, 21, 0, 0, 0, - 70, 2, 16, 0, 22, 0, - 0, 0, 70, 2, 16, 0, - 23, 0, 0, 0, 29, 0, - 0, 7, 66, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 55, 0, 0, 9, - 130, 0, 16, 0, 22, 0, - 0, 0, 42, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 168, 0, 0, 9, - 242, 224, 17, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 14, 16, 0, 22, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 21, 0, - 0, 1, 165, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 20, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 24, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 18, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 24, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 32, 0, 0, 7, - 34, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 60, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 31, 0, - 0, 3, 58, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 86, 0, 0, 5, - 34, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 56, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 86, 0, 0, 5, - 34, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 14, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 165, 0, 0, 7, - 98, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 28, 0, 0, 0, 6, 241, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 130, 0, - 16, 0, 20, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 10, 0, - 16, 0, 21, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 8, 226, 0, - 16, 0, 21, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 18, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 34, 0, 16, 0, 23, 0, - 0, 0, 10, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 3, 0, 4, 3, 26, 0, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 23, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 34, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 112, - 16, 0, 5, 0, 0, 0, - 1, 0, 0, 7, 66, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 23, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 114, 0, 16, 0, - 24, 0, 0, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 226, 17, 0, - 0, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 24, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 22, 0, 0, 0, 70, 2, - 16, 0, 24, 0, 0, 0, - 50, 0, 0, 9, 66, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 24, 0, - 0, 0, 10, 0, 16, 0, - 24, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 50, 0, 0, 9, 66, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 24, 0, - 0, 0, 26, 0, 16, 0, - 24, 0, 0, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 50, 0, 0, 9, 66, 0, - 16, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 24, 0, - 0, 0, 42, 0, 16, 0, - 24, 0, 0, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 85, 0, 0, 7, 34, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 86, 0, - 0, 5, 34, 0, 16, 0, - 23, 0, 0, 0, 26, 0, - 16, 0, 23, 0, 0, 0, - 56, 0, 0, 7, 34, 0, - 16, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 23, 0, 0, 0, 68, 0, - 0, 5, 66, 0, 16, 0, - 23, 0, 0, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 50, 0, 0, 10, 34, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 128, 65, 0, - 0, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 49, 0, - 0, 7, 66, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 24, 0, - 0, 0, 70, 2, 16, 0, - 24, 0, 0, 0, 86, 5, - 16, 0, 23, 0, 0, 0, - 150, 7, 16, 0, 21, 0, - 0, 0, 55, 0, 0, 9, - 226, 0, 16, 0, 21, 0, - 0, 0, 166, 10, 16, 0, - 23, 0, 0, 0, 6, 9, - 16, 0, 24, 0, 0, 0, - 86, 14, 16, 0, 21, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 23, 0, 0, 0, - 22, 0, 0, 1, 50, 0, - 0, 9, 114, 0, 16, 0, - 22, 0, 0, 0, 150, 7, - 16, 0, 21, 0, 0, 0, - 166, 10, 16, 0, 19, 0, - 0, 0, 70, 2, 16, 0, - 22, 0, 0, 0, 168, 0, - 0, 9, 242, 224, 17, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 22, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 4, - 0, 0, 22, 0, 0, 1, - 21, 0, 0, 1, 54, 0, - 0, 5, 66, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 48, 0, 0, 1, 165, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 8, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 80, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 114, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 12, 0, - 0, 0, 70, 242, 17, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 167, 0, 0, 139, - 2, 195, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 3, 0, 0, 0, 167, 0, - 0, 139, 2, 195, 0, 128, - 131, 153, 25, 0, 146, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 6, 116, - 16, 0, 3, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 108, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 56, 0, - 0, 7, 50, 0, 16, 0, - 22, 0, 0, 0, 246, 15, - 16, 0, 19, 0, 0, 0, - 70, 0, 16, 0, 22, 0, - 0, 0, 25, 0, 0, 5, - 50, 0, 16, 0, 22, 0, - 0, 0, 70, 0, 16, 0, - 22, 0, 0, 0, 0, 0, - 0, 11, 50, 0, 16, 0, - 22, 0, 0, 0, 70, 0, - 16, 128, 65, 0, 0, 0, - 22, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 0, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 39, 0, - 0, 7, 66, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 165, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 20, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 190, 24, - 0, 1, 54, 0, 0, 4, - 18, 0, 16, 0, 21, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 18, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 20, 0, - 0, 0, 3, 0, 4, 3, - 10, 0, 16, 0, 23, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 23, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 167, 0, 0, 139, 2, 67, - 0, 128, 131, 153, 25, 0, - 50, 0, 16, 0, 23, 0, - 0, 0, 10, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 112, 16, 0, 4, 0, - 0, 0, 1, 0, 0, 7, - 66, 0, 16, 0, 23, 0, - 0, 0, 26, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 0, 0, - 85, 0, 0, 7, 34, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 30, 0, - 0, 7, 98, 0, 16, 0, - 23, 0, 0, 0, 86, 5, - 16, 0, 0, 0, 0, 0, - 86, 6, 16, 0, 23, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 24, 0, 0, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 238, 17, 0, - 0, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 24, 0, 0, 0, - 70, 2, 16, 0, 25, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 23, 0, - 0, 0, 10, 0, 16, 0, - 26, 0, 0, 0, 10, 0, - 16, 0, 26, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 50, 0, 0, 9, - 130, 0, 16, 0, 23, 0, - 0, 0, 26, 0, 16, 0, - 26, 0, 0, 0, 26, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 26, 0, 0, 0, 42, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 10, 0, - 16, 0, 23, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 50, 0, 0, 9, - 18, 0, 16, 0, 23, 0, - 0, 0, 10, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 191, 1, 0, 0, 7, - 18, 0, 16, 0, 23, 0, - 0, 0, 10, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 51, 0, 0, 8, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 128, - 65, 0, 0, 0, 23, 0, - 0, 0, 52, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 50, 0, 0, 9, 18, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 112, - 16, 0, 16, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 25, 0, - 0, 5, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 0, 0, 0, 8, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 55, 0, 0, 9, - 130, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 22, 0, - 0, 0, 56, 0, 0, 7, - 18, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 23, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 24, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 14, 0, 0, 7, - 18, 0, 16, 0, 23, 0, - 0, 0, 10, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 56, 0, 0, 8, 130, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 24, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 24, 0, - 0, 0, 246, 15, 16, 0, - 23, 0, 0, 0, 70, 2, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 24, 0, - 0, 0, 168, 0, 0, 9, - 114, 224, 17, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 2, 16, 0, 24, 0, - 0, 0, 56, 0, 0, 7, - 18, 0, 16, 0, 23, 0, - 0, 0, 10, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 50, 0, 0, 9, 210, 0, - 16, 0, 23, 0, 0, 0, - 6, 0, 16, 0, 23, 0, - 0, 0, 6, 9, 16, 0, - 26, 0, 0, 0, 6, 9, - 16, 0, 25, 0, 0, 0, - 168, 0, 0, 9, 114, 224, - 17, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 134, 3, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 4, 0, 0, 22, 0, - 0, 1, 30, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 36, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 39, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 31, 0, - 4, 3, 42, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 50, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 36, 0, 0, 0, 70, 240, - 17, 0, 1, 0, 0, 0, - 54, 0, 0, 4, 130, 0, - 16, 0, 19, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 66, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 42, 0, - 16, 0, 20, 0, 0, 0, - 30, 0, 0, 7, 194, 0, - 16, 0, 20, 0, 0, 0, - 6, 4, 16, 0, 20, 0, - 0, 0, 246, 15, 16, 0, - 19, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 22, 0, 0, 0, - 42, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 12, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 12, 0, - 0, 0, 0, 0, 0, 8, - 242, 0, 16, 0, 23, 0, - 0, 0, 70, 14, 16, 128, - 65, 0, 0, 0, 22, 0, - 0, 0, 70, 14, 16, 0, - 23, 0, 0, 0, 50, 0, - 0, 9, 242, 0, 16, 0, - 22, 0, 0, 0, 70, 14, - 16, 0, 23, 0, 0, 0, - 6, 0, 16, 0, 19, 0, - 0, 0, 70, 14, 16, 0, - 22, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 114, 0, 16, 0, - 23, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 226, 17, 0, - 0, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 22, 0, 0, 0, 70, 2, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 23, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 20, 0, 0, 0, - 70, 2, 16, 0, 22, 0, - 0, 0, 70, 2, 16, 0, - 22, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 130, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 51, 0, 0, 7, - 130, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 50, 0, 0, 9, 114, 0, - 16, 0, 22, 0, 0, 0, - 246, 15, 16, 0, 20, 0, - 0, 0, 70, 2, 16, 0, - 22, 0, 0, 0, 70, 2, - 16, 0, 23, 0, 0, 0, - 168, 0, 0, 9, 114, 224, - 17, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 2, - 16, 0, 22, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 4, 0, 0, 22, 0, - 0, 1, 190, 24, 0, 1, - 21, 0, 0, 1, 31, 0, - 4, 3, 10, 0, 16, 0, - 1, 0, 0, 0, 165, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 84, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 2, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 238, 17, 0, - 0, 0, 0, 0, 17, 0, - 0, 8, 18, 0, 16, 0, - 20, 0, 0, 0, 70, 14, - 16, 0, 20, 0, 0, 0, - 70, 158, 144, 0, 10, 0, - 16, 0, 4, 0, 0, 0, - 56, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 4, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 54, 0, 0, 5, 18, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 48, 0, 0, 1, - 30, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 32, 0, 0, 0, 80, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 3, 0, 4, 3, - 26, 0, 16, 0, 20, 0, - 0, 0, 167, 0, 0, 8, - 34, 0, 16, 0, 20, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 4, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 22, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 238, 17, 0, - 0, 0, 0, 0, 17, 0, - 0, 8, 66, 0, 16, 0, - 20, 0, 0, 0, 70, 14, - 16, 0, 22, 0, 0, 0, - 70, 158, 144, 0, 10, 0, - 16, 0, 4, 0, 0, 0, - 56, 0, 0, 7, 66, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 52, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 4, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 22, 0, - 0, 1, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 26, 0, 16, 0, - 1, 0, 0, 0, 167, 0, - 0, 8, 66, 0, 16, 0, - 19, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 4, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 4, 0, 0, 0, - 52, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 4, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 26, 0, 16, 0, 1, 0, - 0, 0, 167, 0, 0, 8, - 66, 0, 16, 0, 19, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 4, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 4, 0, 0, 0, 52, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 4, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 26, 0, - 16, 0, 1, 0, 0, 0, - 167, 0, 0, 8, 66, 0, - 16, 0, 19, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 4, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 4, 0, - 0, 0, 52, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 4, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 26, 0, 16, 0, - 1, 0, 0, 0, 167, 0, - 0, 8, 66, 0, 16, 0, - 19, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 4, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 4, 0, 0, 0, - 52, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 4, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 26, 0, 16, 0, 1, 0, - 0, 0, 167, 0, 0, 8, - 66, 0, 16, 0, 19, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 4, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 4, 0, 0, 0, 52, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 4, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 10, 0, - 16, 0, 2, 0, 0, 0, - 167, 0, 0, 8, 66, 0, - 16, 0, 19, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 4, 0, - 0, 0, 166, 0, 0, 7, - 18, 240, 17, 0, 1, 0, - 0, 0, 42, 0, 16, 0, - 4, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 66, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 86, 0, 0, 5, 66, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 14, 0, 0, 7, - 34, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 60, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 31, 0, - 4, 3, 42, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 80, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 64, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 194, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 56, 0, 0, 0, 6, 244, - 17, 0, 1, 0, 0, 0, - 54, 0, 0, 4, 18, 0, - 16, 0, 21, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 18, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 3, 0, 4, 3, 10, 0, - 16, 0, 22, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 22, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 8, 242, 0, - 16, 0, 24, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 34, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 66, 0, 16, 0, 22, 0, - 0, 0, 26, 0, 16, 0, - 22, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 42, 0, - 16, 0, 22, 0, 0, 0, - 30, 0, 0, 7, 66, 0, - 16, 0, 22, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 22, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 66, 0, - 16, 0, 22, 0, 0, 0, - 42, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 112, - 16, 0, 8, 0, 0, 0, - 136, 0, 0, 5, 130, 0, - 16, 0, 22, 0, 0, 0, - 42, 0, 16, 0, 22, 0, - 0, 0, 30, 0, 0, 7, - 50, 0, 16, 0, 25, 0, - 0, 0, 230, 10, 16, 0, - 20, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 26, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 9, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 25, 0, 0, 0, 26, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 9, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 25, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 26, 0, 0, 0, 70, 14, - 16, 0, 25, 0, 0, 0, - 50, 0, 0, 9, 242, 0, - 16, 0, 25, 0, 0, 0, - 6, 0, 16, 0, 19, 0, - 0, 0, 70, 14, 16, 0, - 25, 0, 0, 0, 70, 14, - 16, 0, 26, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 23, 0, - 0, 0, 70, 2, 16, 0, - 25, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 54, 0, 0, 5, - 114, 0, 16, 0, 26, 0, - 0, 0, 70, 2, 16, 0, - 25, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 25, 0, 0, 0, 42, 0, - 16, 0, 22, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 48, 0, 0, 1, - 49, 0, 0, 7, 18, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 1, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 26, 0, - 16, 0, 27, 0, 0, 0, - 39, 0, 0, 7, 34, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 7, 18, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 27, 0, 0, 0, - 10, 0, 16, 0, 27, 0, - 0, 0, 3, 0, 0, 3, - 10, 0, 16, 0, 27, 0, - 0, 0, 136, 0, 0, 5, - 18, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 30, 0, - 0, 7, 50, 0, 16, 0, - 27, 0, 0, 0, 230, 10, - 16, 0, 20, 0, 0, 0, - 6, 0, 16, 0, 27, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 28, 0, 0, 0, 10, 0, - 16, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 9, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 27, 0, 0, 0, - 26, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 9, 0, 0, 0, - 0, 0, 0, 8, 242, 0, - 16, 0, 27, 0, 0, 0, - 70, 14, 16, 128, 65, 0, - 0, 0, 28, 0, 0, 0, - 70, 14, 16, 0, 27, 0, - 0, 0, 50, 0, 0, 9, - 242, 0, 16, 0, 27, 0, - 0, 0, 6, 0, 16, 0, - 19, 0, 0, 0, 70, 14, - 16, 0, 27, 0, 0, 0, - 70, 14, 16, 0, 28, 0, - 0, 0, 16, 0, 0, 7, - 18, 0, 16, 0, 28, 0, - 0, 0, 70, 2, 16, 0, - 23, 0, 0, 0, 70, 2, - 16, 0, 27, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 10, 0, 16, 0, - 28, 0, 0, 0, 49, 0, - 0, 7, 18, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 26, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 55, 0, 0, 9, - 242, 0, 16, 0, 26, 0, - 0, 0, 6, 0, 16, 0, - 28, 0, 0, 0, 70, 14, - 16, 0, 27, 0, 0, 0, - 70, 14, 16, 0, 26, 0, - 0, 0, 22, 0, 0, 1, - 49, 0, 0, 7, 66, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 26, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 26, 0, 0, 0, 246, 15, - 16, 0, 26, 0, 0, 0, - 70, 2, 16, 0, 24, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 24, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 55, 0, 0, 9, 242, 0, - 16, 0, 24, 0, 0, 0, - 166, 10, 16, 0, 22, 0, - 0, 0, 70, 14, 16, 0, - 25, 0, 0, 0, 70, 14, - 16, 0, 24, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 22, 0, 0, 0, - 26, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 22, 0, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 24, 0, - 0, 0, 86, 0, 0, 5, - 34, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 24, 0, 0, 0, 14, 0, - 0, 10, 34, 0, 16, 0, - 22, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 26, 0, 16, 0, 22, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 19, 0, - 0, 0, 30, 0, 0, 7, - 66, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 114, 0, 16, 0, 25, 0, - 0, 0, 42, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 226, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 80, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 25, 0, 0, 0, - 70, 2, 16, 0, 24, 0, - 0, 0, 70, 2, 16, 0, - 24, 0, 0, 0, 0, 0, - 0, 7, 18, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 18, 0, 16, 0, 27, 0, - 0, 0, 10, 0, 16, 0, - 27, 0, 0, 0, 56, 0, - 0, 7, 226, 0, 16, 0, - 27, 0, 0, 0, 6, 9, - 16, 0, 24, 0, 0, 0, - 6, 0, 16, 0, 27, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 28, 0, - 0, 0, 70, 2, 16, 0, - 23, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 25, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 28, 0, 0, 0, - 150, 7, 16, 0, 27, 0, - 0, 0, 50, 0, 0, 10, - 226, 0, 16, 0, 27, 0, - 0, 0, 246, 15, 16, 128, - 65, 0, 0, 0, 28, 0, - 0, 0, 86, 14, 16, 0, - 27, 0, 0, 0, 6, 9, - 16, 0, 28, 0, 0, 0, - 16, 0, 0, 7, 18, 0, - 16, 0, 28, 0, 0, 0, - 150, 7, 16, 0, 27, 0, - 0, 0, 150, 7, 16, 0, - 27, 0, 0, 0, 0, 0, - 0, 7, 18, 0, 16, 0, - 28, 0, 0, 0, 10, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 18, 0, 16, 0, 28, 0, - 0, 0, 10, 0, 16, 0, - 28, 0, 0, 0, 56, 0, - 0, 8, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 26, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 191, 50, 0, - 0, 10, 114, 0, 16, 0, - 25, 0, 0, 0, 150, 7, - 16, 128, 65, 0, 0, 0, - 27, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 25, 0, - 0, 0, 168, 0, 0, 9, - 114, 224, 17, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 2, 16, 0, 25, 0, - 0, 0, 21, 0, 0, 1, - 50, 0, 0, 9, 114, 0, - 16, 0, 23, 0, 0, 0, - 70, 2, 16, 0, 24, 0, - 0, 0, 86, 5, 16, 0, - 22, 0, 0, 0, 70, 2, - 16, 0, 23, 0, 0, 0, - 168, 0, 0, 9, 242, 224, - 17, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 23, 0, 0, 0, - 21, 0, 0, 1, 30, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 4, - 0, 0, 22, 0, 0, 1, - 21, 0, 0, 1, 27, 0, - 0, 5, 66, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 30, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 114, 0, - 16, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 226, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 68, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 130, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 64, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 54, 0, 0, 8, - 114, 0, 16, 0, 22, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 8, 50, 0, 16, 0, - 23, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 255, 255, 127, 127, 0, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 18, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 48, 0, 0, 1, - 80, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 3, 0, - 4, 3, 58, 0, 16, 0, - 22, 0, 0, 0, 35, 0, - 0, 9, 130, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 167, 0, - 0, 139, 2, 99, 0, 128, - 131, 153, 25, 0, 114, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 114, - 16, 0, 10, 0, 0, 0, - 30, 0, 0, 10, 194, 0, - 16, 0, 23, 0, 0, 0, - 246, 15, 16, 0, 22, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 167, 0, - 0, 139, 2, 99, 0, 128, - 131, 153, 25, 0, 114, 0, - 16, 0, 27, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 114, - 16, 0, 10, 0, 0, 0, - 167, 0, 0, 139, 2, 99, - 0, 128, 131, 153, 25, 0, - 114, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 114, 16, 0, 10, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 25, 0, - 0, 0, 70, 2, 16, 0, - 27, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 25, 0, 0, 0, 70, 2, - 16, 0, 28, 0, 0, 0, - 56, 0, 0, 7, 114, 0, - 16, 0, 29, 0, 0, 0, - 38, 9, 16, 0, 27, 0, - 0, 0, 150, 4, 16, 0, - 28, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 29, 0, 0, 0, 150, 4, - 16, 0, 27, 0, 0, 0, - 38, 9, 16, 0, 28, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 29, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 70, 2, 16, 0, - 29, 0, 0, 0, 70, 2, - 16, 0, 29, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 56, 0, 0, 7, - 114, 0, 16, 0, 29, 0, - 0, 0, 246, 15, 16, 0, - 22, 0, 0, 0, 70, 2, - 16, 0, 29, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 16, 0, - 0, 7, 66, 0, 16, 0, - 23, 0, 0, 0, 70, 2, - 16, 0, 27, 0, 0, 0, - 70, 2, 16, 0, 27, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 28, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 25, 0, 0, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 25, 0, - 0, 0, 14, 0, 0, 10, - 130, 0, 16, 0, 25, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 0, 0, 128, 63, 58, 0, - 16, 0, 25, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 23, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 192, 58, 0, 16, 0, - 27, 0, 0, 0, 14, 0, - 0, 10, 130, 0, 16, 0, - 27, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 58, 0, 16, 0, 27, 0, - 0, 0, 14, 0, 0, 10, - 130, 0, 16, 0, 28, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 0, 0, 128, 63, 42, 0, - 16, 0, 23, 0, 0, 0, - 14, 0, 0, 10, 130, 0, - 16, 0, 29, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 128, 63, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 58, 0, 16, 0, - 23, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 0, 20, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 25, 0, 0, 0, - 16, 0, 0, 7, 18, 0, - 16, 0, 30, 0, 0, 0, - 70, 2, 16, 0, 25, 0, - 0, 0, 70, 2, 16, 0, - 27, 0, 0, 0, 16, 0, - 0, 7, 34, 0, 16, 0, - 30, 0, 0, 0, 70, 2, - 16, 0, 25, 0, 0, 0, - 70, 2, 16, 0, 28, 0, - 0, 0, 16, 0, 0, 7, - 18, 0, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 0, 29, 0, 0, 0, - 56, 0, 0, 7, 194, 0, - 16, 0, 30, 0, 0, 0, - 246, 15, 16, 0, 22, 0, - 0, 0, 86, 1, 16, 0, - 30, 0, 0, 0, 50, 0, - 0, 10, 66, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 10, 0, 16, 0, 30, 0, - 0, 0, 42, 0, 16, 128, - 65, 0, 0, 0, 30, 0, - 0, 0, 50, 0, 0, 10, - 66, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 23, 0, 0, 0, 26, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 30, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 30, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 23, 0, 0, 0, 56, 0, - 0, 7, 66, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 42, 0, 16, 0, 30, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 10, 0, - 16, 0, 30, 0, 0, 0, - 55, 0, 0, 9, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 30, 0, - 0, 0, 42, 0, 16, 0, - 30, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 49, 0, 0, 7, 66, 0, - 16, 0, 30, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 56, 0, - 0, 7, 66, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 26, 0, - 16, 0, 30, 0, 0, 0, - 55, 0, 0, 9, 66, 0, - 16, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 30, 0, - 0, 0, 42, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 25, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 49, 0, - 0, 7, 130, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 58, 0, 16, 0, 25, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 30, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 22, 0, - 0, 0, 26, 0, 16, 128, - 65, 0, 0, 0, 30, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 55, 32, 0, 9, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 51, 0, - 0, 7, 66, 0, 16, 0, - 23, 0, 0, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 52, 0, 0, 7, - 66, 0, 16, 0, 23, 0, - 0, 0, 42, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 56, 0, 0, 7, 114, 0, - 16, 0, 28, 0, 0, 0, - 166, 10, 16, 0, 23, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 27, 0, 0, 0, 70, 2, - 16, 0, 27, 0, 0, 0, - 246, 15, 16, 0, 22, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 0, 25, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 27, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 25, 0, - 0, 0, 70, 2, 16, 0, - 25, 0, 0, 0, 49, 0, - 0, 7, 66, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 31, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 71, 3, 128, 63, - 55, 0, 0, 9, 34, 0, - 16, 0, 31, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 26, 0, 16, 0, 31, 0, - 0, 0, 26, 0, 16, 0, - 23, 0, 0, 0, 55, 0, - 0, 9, 114, 0, 16, 0, - 22, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 70, 2, 16, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 22, 0, 0, 0, 55, 0, - 0, 9, 50, 0, 16, 0, - 23, 0, 0, 0, 246, 15, - 16, 0, 22, 0, 0, 0, - 70, 0, 16, 0, 31, 0, - 0, 0, 70, 0, 16, 0, - 23, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 22, 0, 0, 1, - 49, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 19, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 20, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 22, 0, 0, 0, 6, 0, - 16, 0, 23, 0, 0, 0, - 70, 2, 16, 0, 20, 0, - 0, 0, 168, 0, 0, 9, - 114, 224, 17, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 2, 16, 0, 20, 0, - 0, 0, 21, 0, 0, 1, - 165, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 72, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 31, 0, - 4, 3, 42, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 80, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 98, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 48, 0, 0, 0, - 6, 241, 17, 0, 1, 0, - 0, 0, 165, 0, 0, 7, - 98, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 44, 0, 0, 0, 6, 241, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 130, 0, - 16, 0, 20, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 3, 0, 4, 3, 10, 0, - 16, 0, 21, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 25, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 114, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 226, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 114, 0, - 16, 0, 28, 0, 0, 0, - 70, 2, 16, 0, 25, 0, - 0, 0, 54, 0, 0, 8, - 114, 0, 16, 0, 29, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 8, 242, 0, 16, 0, - 30, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 48, 0, 0, 1, - 80, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 26, 0, 16, 0, - 23, 0, 0, 0, 3, 0, - 4, 3, 58, 0, 16, 0, - 27, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 167, 0, 0, 139, - 2, 67, 0, 128, 131, 153, - 25, 0, 50, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 112, 16, 0, - 6, 0, 0, 0, 30, 0, - 0, 7, 242, 0, 16, 0, - 31, 0, 0, 0, 150, 9, - 16, 0, 20, 0, 0, 0, - 6, 5, 16, 0, 31, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 32, 0, 0, 0, 10, 0, - 16, 0, 31, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 33, 0, 0, 0, - 26, 0, 16, 0, 31, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 34, 0, - 0, 0, 42, 0, 16, 0, - 31, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 31, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 7, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 35, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 32, 0, 0, 0, 70, 14, - 16, 0, 33, 0, 0, 0, - 50, 0, 0, 9, 242, 0, - 16, 0, 36, 0, 0, 0, - 86, 5, 16, 0, 19, 0, - 0, 0, 70, 14, 16, 0, - 35, 0, 0, 0, 70, 14, - 16, 0, 32, 0, 0, 0, - 0, 0, 0, 8, 242, 0, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 128, 65, 0, - 0, 0, 34, 0, 0, 0, - 70, 14, 16, 0, 31, 0, - 0, 0, 50, 0, 0, 9, - 242, 0, 16, 0, 38, 0, - 0, 0, 86, 5, 16, 0, - 19, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 34, 0, - 0, 0, 52, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 39, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 38, 0, 0, 0, - 56, 0, 0, 10, 242, 0, - 16, 0, 39, 0, 0, 0, - 70, 14, 16, 0, 39, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 16, 0, - 0, 7, 130, 0, 16, 0, - 27, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 39, 0, - 0, 0, 29, 0, 0, 7, - 130, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 28, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 7, 0, 0, 1, 21, 0, - 0, 1, 50, 0, 0, 9, - 242, 0, 16, 0, 35, 0, - 0, 0, 6, 0, 16, 0, - 19, 0, 0, 0, 70, 14, - 16, 0, 35, 0, 0, 0, - 70, 14, 16, 0, 32, 0, - 0, 0, 50, 0, 0, 9, - 242, 0, 16, 0, 37, 0, - 0, 0, 6, 0, 16, 0, - 19, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 34, 0, - 0, 0, 52, 0, 0, 7, - 130, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 40, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 35, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 56, 0, 0, 10, 242, 0, - 16, 0, 41, 0, 0, 0, - 70, 14, 16, 0, 40, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 16, 0, - 0, 7, 130, 0, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 41, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 41, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 29, 0, 0, 7, 130, 0, - 16, 0, 31, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 31, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 7, 0, - 0, 1, 21, 0, 0, 1, - 0, 0, 0, 7, 114, 0, - 16, 0, 40, 0, 0, 0, - 38, 9, 16, 0, 36, 0, - 0, 0, 38, 9, 16, 0, - 38, 0, 0, 0, 50, 0, - 0, 13, 114, 0, 16, 0, - 40, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 40, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 0, - 38, 9, 16, 0, 27, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 39, 0, - 0, 0, 58, 0, 16, 0, - 39, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 68, 0, 0, 5, - 130, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 39, 0, 0, 0, 246, 15, - 16, 0, 27, 0, 0, 0, - 70, 2, 16, 0, 39, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 39, 0, 0, 0, - 56, 0, 0, 7, 114, 0, - 16, 0, 42, 0, 0, 0, - 150, 4, 16, 0, 39, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 40, 0, 0, 0, 38, 9, - 16, 0, 40, 0, 0, 0, - 38, 9, 16, 0, 39, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 42, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 27, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 0, 0, 0, 7, 114, 0, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 50, 0, - 0, 13, 114, 0, 16, 0, - 42, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 39, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 0, - 70, 2, 16, 0, 28, 0, - 0, 0, 68, 0, 0, 5, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 68, 0, - 0, 5, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 63, 58, 0, 16, 0, - 35, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 33, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 56, 0, 0, 7, 114, 0, - 16, 0, 43, 0, 0, 0, - 246, 15, 16, 0, 32, 0, - 0, 0, 70, 2, 16, 0, - 41, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 44, 0, 0, 0, 38, 9, - 16, 0, 42, 0, 0, 0, - 150, 4, 16, 0, 43, 0, - 0, 0, 50, 0, 0, 10, - 114, 0, 16, 0, 44, 0, - 0, 0, 150, 4, 16, 0, - 42, 0, 0, 0, 38, 9, - 16, 0, 43, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 44, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 70, 2, 16, 0, 28, 0, - 0, 0, 70, 2, 16, 0, - 43, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 44, 0, 0, 0, - 70, 2, 16, 0, 44, 0, - 0, 0, 0, 0, 0, 7, - 18, 0, 16, 0, 45, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 50, 0, 0, 9, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 41, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 33, 0, - 0, 0, 52, 0, 0, 7, - 34, 0, 16, 0, 45, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 70, 2, 16, 0, 40, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 34, 0, 0, 0, 10, 0, - 16, 128, 65, 0, 0, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 0, 40, 0, - 0, 0, 70, 2, 16, 0, - 44, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 31, 0, 0, 0, 26, 0, - 16, 0, 45, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 128, - 65, 0, 0, 0, 45, 0, - 0, 0, 26, 0, 16, 0, - 45, 0, 0, 0, 10, 0, - 16, 0, 45, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 37, 0, - 0, 0, 75, 0, 0, 5, - 130, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 0, 0, - 0, 8, 130, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 0, 0, 0, 8, 130, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 36, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 51, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 14, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 39, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 49, 0, - 0, 7, 18, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 39, 0, - 0, 0, 58, 0, 16, 0, - 39, 0, 0, 0, 10, 0, - 16, 0, 40, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 0, 0, - 0, 8, 18, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 31, 0, 0, 0, 26, 0, - 16, 0, 45, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 10, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 31, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 1, 64, - 0, 0, 236, 81, 184, 190, - 49, 0, 0, 7, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 39, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 180, - 1, 0, 0, 7, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 40, 0, 0, 0, 70, 2, - 16, 0, 27, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 28, 0, 0, 0, - 50, 0, 0, 10, 114, 0, - 16, 0, 44, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 40, 0, 0, 0, - 246, 15, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 27, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 46, 0, 0, 0, 246, 15, - 16, 0, 28, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 56, 0, - 0, 10, 114, 0, 16, 0, - 36, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 36, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 50, 0, 0, 10, 114, 0, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 36, 0, 0, 0, - 246, 15, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 46, 0, 0, 0, 0, 0, - 0, 8, 130, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 50, 0, 0, 10, 114, 0, - 16, 0, 38, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 36, 0, 0, 0, - 246, 15, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 46, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 38, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 37, 0, - 0, 0, 70, 2, 16, 0, - 44, 0, 0, 0, 70, 2, - 16, 0, 38, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 16, 0, - 0, 7, 18, 0, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 44, 0, 0, 0, - 70, 2, 16, 0, 44, 0, - 0, 0, 50, 0, 0, 10, - 18, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 38, 0, 0, 0, - 49, 0, 0, 7, 34, 0, - 16, 0, 38, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 38, 0, 0, 0, 68, 0, - 0, 5, 66, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 38, 0, 0, 0, - 1, 0, 0, 7, 34, 0, - 16, 0, 38, 0, 0, 0, - 42, 0, 16, 0, 38, 0, - 0, 0, 26, 0, 16, 0, - 38, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 10, 0, 16, 0, 38, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 49, 0, 0, 8, 130, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 128, 129, 0, - 0, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 50, 0, 0, 9, - 114, 0, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 36, 0, 0, 0, 246, 15, - 16, 0, 27, 0, 0, 0, - 70, 2, 16, 0, 40, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 14, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 0, 0, - 0, 8, 130, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 27, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 14, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 36, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 246, 15, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 0, - 42, 0, 0, 0, 50, 0, - 0, 12, 114, 0, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 0, 70, 2, 16, 0, - 36, 0, 0, 0, 55, 0, - 0, 9, 114, 0, 16, 0, - 38, 0, 0, 0, 246, 15, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 55, 0, - 0, 9, 114, 0, 16, 0, - 38, 0, 0, 0, 246, 15, - 16, 0, 31, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 0, - 28, 0, 0, 0, 50, 0, - 0, 13, 114, 0, 16, 0, - 39, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 39, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 70, 2, - 16, 0, 43, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 39, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 49, 0, - 0, 7, 130, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 37, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 5, 114, 0, - 16, 0, 28, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 7, 0, - 0, 1, 21, 0, 0, 1, - 56, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 52, 0, 0, 7, - 130, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 68, 0, 0, 5, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 49, 0, 0, 8, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 128, 129, 0, - 0, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 50, 0, 0, 10, - 114, 0, 16, 0, 39, 0, - 0, 0, 246, 15, 16, 128, - 65, 0, 0, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 41, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 32, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 39, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 246, 15, - 16, 0, 32, 0, 0, 0, - 70, 2, 16, 0, 29, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 33, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 32, 0, - 0, 0, 70, 2, 16, 0, - 33, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 32, 0, 0, 0, 86, 5, - 16, 0, 19, 0, 0, 0, - 70, 2, 16, 0, 33, 0, - 0, 0, 70, 2, 16, 0, - 32, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 31, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 34, 0, 0, 0, 70, 2, - 16, 0, 31, 0, 0, 0, - 50, 0, 0, 9, 114, 0, - 16, 0, 31, 0, 0, 0, - 86, 5, 16, 0, 19, 0, - 0, 0, 70, 2, 16, 0, - 31, 0, 0, 0, 70, 2, - 16, 0, 34, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 63, 1, 64, - 0, 0, 0, 0, 0, 63, - 0, 0, 0, 8, 114, 0, - 16, 0, 32, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 32, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 31, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 32, 0, 0, 0, 70, 2, - 16, 0, 31, 0, 0, 0, - 50, 0, 0, 9, 114, 0, - 16, 0, 31, 0, 0, 0, - 246, 15, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 0, - 31, 0, 0, 0, 70, 2, - 16, 0, 32, 0, 0, 0, - 0, 0, 0, 7, 114, 0, - 16, 0, 31, 0, 0, 0, - 70, 2, 16, 0, 30, 0, - 0, 0, 70, 2, 16, 0, - 31, 0, 0, 0, 55, 0, - 0, 9, 114, 0, 16, 0, - 32, 0, 0, 0, 246, 15, - 16, 0, 19, 0, 0, 0, - 70, 2, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 30, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 30, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 55, 0, 0, 9, - 114, 0, 16, 0, 31, 0, - 0, 0, 246, 15, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 29, 0, - 0, 0, 55, 0, 0, 9, - 242, 0, 16, 0, 32, 0, - 0, 0, 246, 15, 16, 0, - 28, 0, 0, 0, 70, 14, - 16, 0, 32, 0, 0, 0, - 70, 14, 16, 0, 30, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 0, - 36, 0, 0, 0, 70, 2, - 16, 0, 41, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 33, 0, 0, 0, - 52, 0, 0, 7, 34, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 50, 0, 0, 10, - 18, 0, 16, 0, 33, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 55, 0, 0, 9, 50, 0, - 16, 0, 33, 0, 0, 0, - 246, 15, 16, 0, 36, 0, - 0, 0, 70, 0, 16, 0, - 33, 0, 0, 0, 70, 0, - 16, 0, 45, 0, 0, 0, - 55, 0, 0, 9, 50, 0, - 16, 0, 33, 0, 0, 0, - 246, 15, 16, 0, 31, 0, - 0, 0, 70, 0, 16, 0, - 33, 0, 0, 0, 70, 0, - 16, 0, 45, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 26, 0, 16, 0, 33, 0, - 0, 0, 26, 0, 16, 0, - 33, 0, 0, 0, 29, 0, - 0, 7, 130, 0, 16, 0, - 27, 0, 0, 0, 10, 0, - 16, 0, 33, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 27, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 5, 114, 0, - 16, 0, 28, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 54, 0, 0, 5, - 114, 0, 16, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 31, 0, 0, 0, 54, 0, - 0, 5, 242, 0, 16, 0, - 30, 0, 0, 0, 70, 14, - 16, 0, 32, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 7, 0, 0, 1, - 21, 0, 0, 1, 54, 0, - 0, 5, 114, 0, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 38, 0, 0, 0, - 54, 0, 0, 5, 114, 0, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 31, 0, - 0, 0, 54, 0, 0, 5, - 242, 0, 16, 0, 30, 0, - 0, 0, 70, 14, 16, 0, - 32, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 22, 0, 0, 1, - 165, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 52, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 114, 0, 16, 0, - 31, 0, 0, 0, 70, 2, - 16, 0, 28, 0, 0, 0, - 54, 0, 0, 5, 114, 0, - 16, 0, 32, 0, 0, 0, - 70, 2, 16, 0, 29, 0, - 0, 0, 54, 0, 0, 5, - 242, 0, 16, 0, 33, 0, - 0, 0, 70, 14, 16, 0, - 30, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 27, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 130, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 28, 0, - 0, 0, 30, 0, 0, 7, - 50, 0, 16, 0, 34, 0, - 0, 0, 150, 5, 16, 0, - 20, 0, 0, 0, 246, 15, - 16, 0, 27, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 35, 0, - 0, 0, 10, 0, 16, 0, - 34, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 34, 0, 0, 0, 26, 0, - 16, 0, 34, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 7, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 34, 0, 0, 0, 70, 14, - 16, 128, 65, 0, 0, 0, - 35, 0, 0, 0, 70, 14, - 16, 0, 34, 0, 0, 0, - 50, 0, 0, 9, 242, 0, - 16, 0, 36, 0, 0, 0, - 6, 0, 16, 0, 19, 0, - 0, 0, 70, 14, 16, 0, - 34, 0, 0, 0, 70, 14, - 16, 0, 35, 0, 0, 0, - 52, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 34, 0, 0, 0, 86, 5, - 16, 0, 19, 0, 0, 0, - 70, 2, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 31, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 36, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 37, 0, 0, 0, - 70, 2, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 34, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 16, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 50, 0, 0, 10, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 50, 0, 0, 10, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 36, 0, 0, 0, - 75, 0, 0, 5, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 0, 0, 0, 8, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 0, 0, - 0, 8, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 34, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 51, 0, 0, 7, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 14, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 49, 0, - 0, 7, 18, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 49, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 10, 0, 16, 0, - 38, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 1, 64, - 0, 0, 236, 81, 184, 190, - 49, 0, 0, 7, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 49, 0, 0, 7, - 130, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 180, - 1, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 0, 0, 0, 8, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 128, 65, 0, - 0, 0, 34, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 56, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 14, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 0, 0, - 0, 8, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 32, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 14, 0, 0, 7, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 246, 15, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 0, 0, - 0, 7, 114, 0, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 55, 0, - 0, 9, 114, 0, 16, 0, - 31, 0, 0, 0, 246, 15, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 0, - 31, 0, 0, 0, 55, 0, - 0, 9, 242, 0, 16, 0, - 35, 0, 0, 0, 246, 15, - 16, 0, 29, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 35, 0, 0, 0, 68, 0, - 0, 5, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 49, 0, - 0, 7, 130, 0, 16, 0, - 31, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 58, 0, 16, 0, 31, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 191, 50, 0, 0, 9, - 114, 0, 16, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 246, 15, - 16, 0, 28, 0, 0, 0, - 70, 2, 16, 0, 32, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 36, 0, 0, 0, 0, 0, - 0, 7, 114, 0, 16, 0, - 34, 0, 0, 0, 70, 2, - 16, 0, 33, 0, 0, 0, - 70, 2, 16, 0, 34, 0, - 0, 0, 55, 0, 0, 9, - 114, 0, 16, 0, 34, 0, - 0, 0, 246, 15, 16, 0, - 19, 0, 0, 0, 70, 2, - 16, 0, 34, 0, 0, 0, - 70, 2, 16, 0, 33, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 55, 0, 0, 9, 114, 0, - 16, 0, 32, 0, 0, 0, - 246, 15, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 32, 0, 0, 0, - 55, 0, 0, 9, 242, 0, - 16, 0, 33, 0, 0, 0, - 246, 15, 16, 0, 31, 0, - 0, 0, 70, 14, 16, 0, - 34, 0, 0, 0, 70, 14, - 16, 0, 33, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 22, 0, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 33, 0, - 0, 0, 86, 0, 0, 5, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 33, 0, 0, 0, 14, 0, - 0, 10, 130, 0, 16, 0, - 23, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 58, 0, 16, 0, 23, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 19, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 80, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 70, 2, 16, 0, 32, 0, - 0, 0, 70, 2, 16, 0, - 32, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 31, 0, 0, 0, 246, 15, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 32, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 27, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 34, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 33, 0, 0, 0, 246, 15, - 16, 0, 23, 0, 0, 0, - 70, 2, 16, 0, 34, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 34, 0, 0, 0, 70, 2, - 16, 0, 31, 0, 0, 0, - 50, 0, 0, 10, 114, 0, - 16, 0, 31, 0, 0, 0, - 246, 15, 16, 128, 65, 0, - 0, 0, 31, 0, 0, 0, - 70, 2, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 34, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 31, 0, 0, 0, 70, 2, - 16, 0, 31, 0, 0, 0, - 70, 2, 16, 0, 31, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 31, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 68, 0, 0, 5, 130, 0, - 16, 0, 31, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 56, 0, 0, 8, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 31, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 191, 50, 0, 0, 10, - 114, 0, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 31, 0, - 0, 0, 246, 15, 16, 0, - 27, 0, 0, 0, 70, 2, - 16, 0, 27, 0, 0, 0, - 168, 0, 0, 9, 114, 224, - 17, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 2, - 16, 0, 27, 0, 0, 0, - 21, 0, 0, 1, 50, 0, - 0, 9, 114, 0, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 0, 32, 0, 0, 0, - 246, 15, 16, 0, 23, 0, - 0, 0, 70, 2, 16, 0, - 25, 0, 0, 0, 168, 0, - 0, 9, 242, 224, 17, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 25, 0, 0, 0, 21, 0, - 0, 1, 30, 0, 0, 7, - 130, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 18, 0, - 0, 1, 165, 0, 0, 7, - 194, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 76, 0, 0, 0, 6, 244, - 17, 0, 0, 0, 0, 0, - 49, 0, 0, 10, 194, 0, - 16, 0, 19, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 246, 11, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 18, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 98, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 48, 0, 0, 0, 6, 241, - 17, 0, 1, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 80, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 49, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 20, 0, - 0, 0, 165, 0, 0, 7, - 98, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 44, 0, 0, 0, 6, 241, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 130, 0, - 16, 0, 22, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 8, 242, 0, - 16, 0, 31, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 8, - 242, 0, 16, 0, 27, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 130, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 26, 0, - 16, 0, 23, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 28, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 42, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 167, 0, - 0, 139, 2, 67, 0, 128, - 131, 153, 25, 0, 50, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 112, - 16, 0, 6, 0, 0, 0, - 30, 0, 0, 7, 242, 0, - 16, 0, 34, 0, 0, 0, - 150, 9, 16, 0, 20, 0, - 0, 0, 6, 5, 16, 0, - 34, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 35, 0, 0, 0, - 10, 0, 16, 0, 34, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 34, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 0, 0, 0, 8, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 128, - 65, 0, 0, 0, 35, 0, - 0, 0, 70, 14, 16, 0, - 36, 0, 0, 0, 50, 0, - 0, 9, 242, 0, 16, 0, - 37, 0, 0, 0, 6, 0, - 16, 0, 19, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 35, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 38, 0, 0, 0, - 42, 0, 16, 0, 34, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 7, 0, - 0, 0, 0, 0, 0, 8, - 242, 0, 16, 0, 39, 0, - 0, 0, 70, 14, 16, 128, - 65, 0, 0, 0, 38, 0, - 0, 0, 70, 14, 16, 0, - 34, 0, 0, 0, 50, 0, - 0, 9, 242, 0, 16, 0, - 39, 0, 0, 0, 6, 0, - 16, 0, 19, 0, 0, 0, - 70, 14, 16, 0, 39, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 52, 0, 0, 7, - 130, 0, 16, 0, 39, 0, - 0, 0, 58, 0, 16, 0, - 39, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 242, 0, - 16, 0, 40, 0, 0, 0, - 70, 14, 16, 128, 65, 0, - 0, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 39, 0, - 0, 0, 56, 0, 0, 10, - 242, 0, 16, 0, 41, 0, - 0, 0, 70, 14, 16, 0, - 40, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 63, 0, 0, 0, 63, - 16, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 70, 2, 16, 0, - 41, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 41, 0, 0, 0, 58, 0, - 16, 0, 41, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 29, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 32, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 7, 0, 0, 1, 21, 0, - 0, 1, 68, 0, 0, 5, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 68, 0, - 0, 5, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 0, 0, - 0, 7, 114, 0, 16, 0, - 40, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 70, 2, 16, 0, 39, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 40, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 63, - 58, 0, 16, 0, 37, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 41, 0, 0, 0, 246, 15, - 16, 0, 32, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 41, 0, 0, 0, - 50, 0, 0, 13, 114, 0, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 40, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, - 0, 0, 70, 2, 16, 0, - 25, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 0, 41, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 52, 0, 0, 7, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 40, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 35, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 37, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 7, 0, - 0, 1, 21, 0, 0, 1, - 56, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 128, 65, 0, 0, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 63, 52, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 68, 0, 0, 5, 130, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 35, 0, 0, 0, - 49, 0, 0, 8, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 128, 129, 0, - 0, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 50, 0, 0, 10, - 114, 0, 16, 0, 40, 0, - 0, 0, 246, 15, 16, 128, - 65, 0, 0, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 41, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 32, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 40, 0, - 0, 0, 70, 2, 16, 0, - 40, 0, 0, 0, 246, 15, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 27, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 35, 0, - 0, 0, 70, 2, 16, 0, - 36, 0, 0, 0, 50, 0, - 0, 9, 114, 0, 16, 0, - 35, 0, 0, 0, 86, 5, - 16, 0, 19, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 35, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 34, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 34, 0, 0, 0, - 50, 0, 0, 9, 114, 0, - 16, 0, 34, 0, 0, 0, - 86, 5, 16, 0, 19, 0, - 0, 0, 70, 2, 16, 0, - 34, 0, 0, 0, 70, 2, - 16, 0, 38, 0, 0, 0, - 50, 0, 0, 9, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 35, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 63, 1, 64, - 0, 0, 0, 0, 0, 63, - 0, 0, 0, 8, 114, 0, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 35, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 34, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 35, 0, 0, 0, 70, 2, - 16, 0, 34, 0, 0, 0, - 50, 0, 0, 9, 114, 0, - 16, 0, 34, 0, 0, 0, - 246, 15, 16, 0, 29, 0, - 0, 0, 70, 2, 16, 0, - 34, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 0, 0, 0, 7, 114, 0, - 16, 0, 34, 0, 0, 0, - 70, 2, 16, 0, 31, 0, - 0, 0, 70, 2, 16, 0, - 34, 0, 0, 0, 55, 0, - 0, 9, 114, 0, 16, 0, - 34, 0, 0, 0, 6, 0, - 16, 0, 21, 0, 0, 0, - 70, 2, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 31, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 31, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 55, 0, 0, 9, - 114, 0, 16, 0, 27, 0, - 0, 0, 246, 15, 16, 0, - 28, 0, 0, 0, 70, 2, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 0, 27, 0, - 0, 0, 55, 0, 0, 9, - 242, 0, 16, 0, 31, 0, - 0, 0, 246, 15, 16, 0, - 28, 0, 0, 0, 70, 14, - 16, 0, 34, 0, 0, 0, - 70, 14, 16, 0, 31, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 22, 0, 0, 1, 165, 0, - 0, 7, 130, 0, 16, 0, - 27, 0, 0, 0, 1, 64, - 0, 0, 52, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 114, 0, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 27, 0, 0, 0, 54, 0, - 0, 5, 242, 0, 16, 0, - 35, 0, 0, 0, 70, 14, - 16, 0, 31, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 48, 0, 0, 1, - 80, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 3, 0, - 4, 3, 58, 0, 16, 0, - 29, 0, 0, 0, 30, 0, - 0, 7, 50, 0, 16, 0, - 36, 0, 0, 0, 150, 5, - 16, 0, 20, 0, 0, 0, - 246, 15, 16, 0, 28, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 126, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 126, - 16, 0, 7, 0, 0, 0, - 0, 0, 0, 8, 242, 0, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 128, 65, 0, - 0, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 50, 0, 0, 9, - 242, 0, 16, 0, 38, 0, - 0, 0, 6, 0, 16, 0, - 19, 0, 0, 0, 70, 14, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 52, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 38, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 39, 0, 0, 0, - 70, 2, 16, 0, 25, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 38, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 70, 2, - 16, 0, 39, 0, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 68, 0, - 0, 5, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 49, 0, - 0, 7, 130, 0, 16, 0, - 34, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 58, 0, 16, 0, 34, 0, - 0, 0, 50, 0, 0, 9, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 191, 50, 0, 0, 9, - 114, 0, 16, 0, 39, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 246, 15, - 16, 0, 29, 0, 0, 0, - 70, 2, 16, 0, 34, 0, - 0, 0, 50, 0, 0, 9, - 114, 0, 16, 0, 36, 0, - 0, 0, 86, 5, 16, 0, - 19, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 0, 0, - 0, 7, 114, 0, 16, 0, - 36, 0, 0, 0, 70, 2, - 16, 0, 35, 0, 0, 0, - 70, 2, 16, 0, 36, 0, - 0, 0, 55, 0, 0, 9, - 114, 0, 16, 0, 36, 0, - 0, 0, 6, 0, 16, 0, - 21, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 35, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 55, 0, 0, 9, 114, 0, - 16, 0, 34, 0, 0, 0, - 246, 15, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 39, 0, 0, 0, 70, 2, - 16, 0, 34, 0, 0, 0, - 55, 0, 0, 9, 242, 0, - 16, 0, 35, 0, 0, 0, - 246, 15, 16, 0, 34, 0, - 0, 0, 70, 14, 16, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 35, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 28, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 22, 0, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 35, 0, - 0, 0, 86, 0, 0, 5, - 130, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 35, 0, 0, 0, 14, 0, - 0, 10, 130, 0, 16, 0, - 27, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 58, 0, 16, 0, 27, 0, - 0, 0, 31, 0, 4, 3, - 42, 0, 16, 0, 19, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 28, 0, - 0, 0, 10, 0, 16, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 114, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 226, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 1, 64, 0, 0, - 80, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 70, 2, 16, 0, 34, 0, - 0, 0, 70, 2, 16, 0, - 34, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 68, 0, 0, 5, - 130, 0, 16, 0, 34, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 56, 0, - 0, 7, 114, 0, 16, 0, - 37, 0, 0, 0, 246, 15, - 16, 0, 34, 0, 0, 0, - 70, 2, 16, 0, 34, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 38, 0, - 0, 0, 70, 2, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 36, 0, 0, 0, 50, 0, - 0, 10, 114, 0, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 128, 65, 0, 0, 0, - 35, 0, 0, 0, 246, 15, - 16, 0, 27, 0, 0, 0, - 70, 2, 16, 0, 38, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 50, 0, 0, 10, 114, 0, - 16, 0, 37, 0, 0, 0, - 246, 15, 16, 128, 65, 0, - 0, 0, 36, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 70, 2, 16, 0, - 38, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 70, 2, - 16, 0, 37, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 68, 0, 0, 5, 130, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 56, 0, 0, 8, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 58, 0, 16, 0, 29, 0, - 0, 0, 56, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 29, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 52, 0, - 0, 7, 130, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 29, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 191, 50, 0, 0, 10, - 114, 0, 16, 0, 36, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 37, 0, - 0, 0, 246, 15, 16, 0, - 29, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 114, 224, - 17, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 2, - 16, 0, 36, 0, 0, 0, - 21, 0, 0, 1, 50, 0, - 0, 9, 114, 0, 16, 0, - 36, 0, 0, 0, 70, 2, - 16, 0, 34, 0, 0, 0, - 246, 15, 16, 0, 27, 0, - 0, 0, 70, 2, 16, 0, - 25, 0, 0, 0, 16, 0, - 0, 7, 18, 0, 16, 0, - 25, 0, 0, 0, 70, 2, - 16, 0, 34, 0, 0, 0, - 70, 2, 16, 0, 34, 0, - 0, 0, 165, 0, 0, 7, - 34, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 76, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 50, 0, 0, 9, 18, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 63, - 14, 0, 0, 7, 18, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 55, 0, - 0, 9, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 168, 0, - 0, 9, 242, 224, 17, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 36, 0, 0, 0, 21, 0, - 0, 1, 30, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 21, 0, - 0, 1, 165, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 84, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 72, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 51, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 49, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 18, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 88, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 165, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 31, 0, 4, 3, - 42, 0, 16, 0, 1, 0, - 0, 0, 165, 0, 0, 7, - 194, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 4, 0, 0, 0, 6, 244, - 17, 0, 1, 0, 0, 0, - 0, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 50, 0, - 0, 12, 194, 0, 16, 0, - 19, 0, 0, 0, 6, 0, - 16, 0, 20, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 23, 183, 209, 56, 23, 183, - 209, 56, 246, 11, 16, 0, - 19, 0, 0, 0, 0, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 6, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 18, 0, - 0, 1, 54, 0, 0, 8, - 194, 0, 16, 0, 19, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 42, 0, - 16, 0, 1, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 6, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 6, 0, 0, 0, - 49, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 1, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 6, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 2, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 6, 0, - 0, 0, 49, 0, 0, 7, - 34, 0, 16, 0, 20, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 20, 0, 0, 0, - 55, 0, 0, 9, 18, 0, - 16, 0, 20, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 254, 255, 255, 255, 10, 0, - 16, 0, 20, 0, 0, 0, - 30, 0, 0, 6, 18, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 10, 32, 2, 0, - 85, 0, 0, 7, 34, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 30, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 14, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 254, 66, 58, 0, - 16, 0, 19, 0, 0, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 84, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 14, 0, - 0, 10, 34, 0, 16, 0, - 20, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 128, 63, - 0, 0, 128, 63, 0, 0, - 128, 63, 0, 0, 128, 63, - 26, 0, 16, 0, 20, 0, - 0, 0, 51, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 20, 0, 0, 0, - 41, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 2, 0, 0, 0, 30, 0, - 0, 10, 98, 0, 16, 0, - 20, 0, 0, 0, 6, 0, - 16, 0, 20, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, - 24, 0, 0, 0, 0, 0, - 0, 0, 166, 0, 0, 7, - 18, 240, 17, 0, 5, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 56, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 166, 0, - 0, 7, 18, 240, 17, 0, - 5, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 166, 0, 0, 6, - 18, 240, 17, 0, 5, 0, - 0, 0, 42, 0, 16, 0, - 20, 0, 0, 0, 10, 32, - 2, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 165, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 100, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 41, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 30, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 116, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 19, 0, - 0, 0, 54, 0, 0, 4, - 130, 0, 16, 0, 19, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 33, 0, - 0, 7, 18, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 3, 65, - 0, 0, 3, 0, 4, 3, - 10, 0, 16, 0, 20, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 168, 0, 0, 9, 18, 224, - 17, 0, 2, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 30, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 4, 0, 0, 22, 0, - 0, 1, 21, 0, 0, 1, - 165, 0, 0, 7, 50, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 16, 0, - 0, 0, 70, 240, 17, 0, - 5, 0, 0, 0, 165, 0, - 0, 7, 194, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 4, 0, 0, 0, - 6, 244, 17, 0, 5, 0, - 0, 0, 165, 0, 0, 7, - 98, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 28, 0, 0, 0, 6, 241, - 17, 0, 5, 0, 0, 0, - 165, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 92, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 39, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 165, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 100, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 130, 0, - 16, 0, 23, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 33, 0, 0, 7, - 18, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 10, 0, - 16, 0, 25, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 18, 0, - 16, 0, 25, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 112, - 16, 0, 15, 0, 0, 0, - 55, 0, 0, 9, 18, 0, - 16, 0, 25, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 0, 0, 0, 0, - 17, 0, 0, 8, 34, 0, - 16, 0, 25, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 70, 158, 144, 0, - 26, 0, 16, 0, 23, 0, - 0, 0, 50, 0, 0, 9, - 34, 0, 16, 0, 25, 0, - 0, 0, 26, 0, 16, 0, - 25, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 20, 0, - 0, 0, 51, 0, 0, 7, - 34, 0, 16, 0, 25, 0, - 0, 0, 26, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 255, 66, - 52, 0, 0, 7, 34, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 17, 0, - 0, 8, 66, 0, 16, 0, - 25, 0, 0, 0, 70, 14, - 16, 0, 36, 0, 0, 0, - 70, 158, 144, 0, 42, 0, - 16, 0, 23, 0, 0, 0, - 50, 0, 0, 9, 66, 0, - 16, 0, 25, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 20, 0, 0, 0, - 51, 0, 0, 7, 66, 0, - 16, 0, 25, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 255, 66, 52, 0, - 0, 7, 66, 0, 16, 0, - 25, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 27, 0, 0, 5, - 98, 0, 16, 0, 25, 0, - 0, 0, 86, 6, 16, 0, - 25, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 58, 0, 16, 0, 23, 0, - 0, 0, 41, 0, 0, 7, - 66, 0, 16, 0, 25, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 23, 0, 0, 0, - 35, 0, 0, 9, 34, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 1, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 129, 0, 60, 0, - 0, 7, 18, 0, 16, 0, - 25, 0, 0, 0, 10, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 168, 0, 0, 9, - 18, 224, 17, 0, 2, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 50, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 96, 0, 0, 0, 70, 240, - 17, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 25, 0, 0, 0, 54, 0, - 0, 4, 18, 0, 16, 0, - 21, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 33, 0, 0, 7, 130, 0, - 16, 0, 22, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 3, 0, - 4, 3, 58, 0, 16, 0, - 22, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 26, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 242, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 238, 17, 0, 0, 0, - 0, 0, 168, 0, 0, 9, - 242, 224, 17, 0, 1, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 30, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 31, 0, 0, 0, - 138, 0, 0, 9, 130, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 5, 0, - 0, 0, 1, 64, 0, 0, - 5, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 85, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 10, 0, 0, 0, 79, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 26, 0, - 16, 0, 4, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 0, 0, 7, - 18, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 25, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 55, 0, - 0, 9, 66, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 38, 0, - 0, 8, 0, 208, 0, 0, - 66, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 22, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 35, 0, 0, 9, 66, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 4, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 41, 0, 0, 10, 146, 0, - 16, 0, 25, 0, 0, 0, - 6, 8, 16, 0, 25, 0, - 0, 0, 2, 64, 0, 0, - 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 25, 0, 0, 0, 10, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 84, 0, 0, 7, - 18, 0, 16, 0, 25, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 25, 0, 0, 0, - 140, 0, 0, 10, 66, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 27, 0, - 0, 0, 1, 64, 0, 0, - 5, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 10, 32, 2, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 16, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 27, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 32, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 29, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 29, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 34, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 18, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 3, 0, 4, 3, - 10, 0, 16, 0, 36, 0, - 0, 0, 79, 0, 0, 7, - 18, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 10, 0, - 16, 0, 25, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 34, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 55, 0, 0, 9, 18, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 85, 0, 0, 7, 18, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 1, 0, - 0, 10, 242, 0, 16, 0, - 36, 0, 0, 0, 6, 0, - 16, 0, 36, 0, 0, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 8, 0, - 0, 0, 39, 0, 0, 10, - 242, 0, 16, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 36, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 140, 0, 0, 16, 242, 0, - 16, 0, 36, 0, 0, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 6, 32, 2, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 190, 24, 0, 1, 31, 0, - 4, 3, 10, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 36, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 26, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 36, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 36, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 8, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 42, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 36, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 36, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 36, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 58, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 13, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 5, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 36, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 36, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 167, 0, 0, 9, 18, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 5, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 87, 0, 0, 7, 50, 0, - 16, 0, 36, 0, 0, 0, - 230, 10, 16, 0, 2, 0, - 0, 0, 70, 0, 16, 0, - 36, 0, 0, 0, 1, 0, - 0, 7, 18, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 87, 0, 0, 7, - 34, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 5, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 1, 0, 0, 7, 18, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 87, 0, - 0, 7, 34, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 5, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 1, 0, 0, 7, - 18, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 134, 0, 0, 5, 18, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 34, 0, 0, 0, 58, 0, - 16, 0, 34, 0, 0, 0, - 1, 64, 0, 0, 32, 0, - 0, 0, 22, 0, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 22, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 58, 0, 16, 0, - 34, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 79, 0, 0, 7, 18, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 34, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 55, 0, - 0, 9, 130, 0, 16, 0, - 32, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 85, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 1, 0, 0, 10, - 242, 0, 16, 0, 36, 0, - 0, 0, 246, 15, 16, 0, - 32, 0, 0, 0, 2, 64, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 4, 0, - 0, 0, 8, 0, 0, 0, - 39, 0, 0, 10, 242, 0, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 140, 0, - 0, 16, 242, 0, 16, 0, - 36, 0, 0, 0, 2, 64, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 6, 32, 2, 0, 70, 14, - 16, 0, 36, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 36, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 36, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 6, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 6, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 23, 0, - 0, 0, 31, 0, 4, 3, - 26, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 36, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 36, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 8, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 23, 0, 0, 0, 31, 0, - 4, 3, 42, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 36, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 21, 0, 0, 1, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 36, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 36, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 58, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 13, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 36, 0, - 0, 0, 70, 14, 16, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 23, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 5, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 36, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 36, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 36, 0, 0, 0, 70, 14, - 16, 0, 36, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 23, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 5, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 36, 0, 0, 0, 10, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 18, 0, - 0, 1, 54, 0, 0, 8, - 242, 0, 16, 0, 36, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 1, 87, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 42, 0, 16, 0, - 2, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 87, 0, 0, 7, 18, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 2, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 87, 0, 0, 7, - 50, 0, 16, 0, 36, 0, - 0, 0, 70, 0, 16, 0, - 5, 0, 0, 0, 230, 10, - 16, 0, 36, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 26, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 134, 0, 0, 5, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 29, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 21, 0, 0, 1, 31, 0, - 4, 3, 10, 0, 16, 0, - 7, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 11, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 29, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 0, 2, 10, 32, - 2, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 16, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 1, 18, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 21, 0, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 1, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 16, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 32, 0, 0, 0, - 26, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 58, 0, - 16, 0, 11, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 18, 0, - 0, 1, 167, 0, 0, 9, - 130, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 1, 16, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 2, 18, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 1, 0, - 0, 0, 31, 0, 4, 3, - 26, 0, 16, 0, 16, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 11, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 18, 0, 0, 1, 167, 0, - 0, 9, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 11, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 21, 0, - 0, 1, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 15, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 1, 0, 0, 0, 31, 0, - 4, 3, 42, 0, 16, 0, - 16, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 32, 0, 0, 0, 26, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 15, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 18, 0, 0, 1, - 167, 0, 0, 9, 130, 0, - 16, 0, 32, 0, 0, 0, - 26, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 21, 0, 0, 1, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 15, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 1, 0, 0, 0, - 31, 0, 4, 3, 58, 0, - 16, 0, 16, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 11, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 18, 0, - 0, 1, 167, 0, 0, 9, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 11, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 21, 0, 0, 1, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 15, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 1, 0, - 0, 0, 31, 0, 4, 3, - 10, 0, 16, 0, 18, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 32, 0, - 0, 0, 26, 0, 16, 0, - 14, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 17, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 18, 0, 0, 1, 167, 0, - 0, 9, 130, 0, 16, 0, - 32, 0, 0, 0, 26, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 21, 0, - 0, 1, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 15, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 1, 0, 0, 0, 31, 0, - 4, 3, 26, 0, 16, 0, - 18, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 11, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 18, 0, 0, 1, - 167, 0, 0, 9, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 11, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 21, 0, 0, 1, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 15, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 1, 0, 0, 0, - 31, 0, 4, 3, 42, 0, - 16, 0, 18, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 32, 0, 0, 0, - 26, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 18, 0, - 0, 1, 167, 0, 0, 9, - 130, 0, 16, 0, 32, 0, - 0, 0, 26, 0, 16, 0, - 14, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 21, 0, 0, 1, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 15, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 1, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 18, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 11, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 13, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 10, 0, - 16, 0, 36, 0, 0, 0, - 18, 0, 0, 1, 167, 0, - 0, 9, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 11, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 21, 0, - 0, 1, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 15, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 1, 0, 0, 0, 31, 0, - 4, 3, 26, 0, 16, 0, - 15, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 32, 0, 0, 0, 26, 0, - 16, 0, 14, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 17, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 18, 0, 0, 1, - 167, 0, 0, 9, 130, 0, - 16, 0, 32, 0, 0, 0, - 26, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 21, 0, 0, 1, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 15, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 54, 0, 0, 5, 130, 0, - 16, 0, 32, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 18, 0, 16, 0, 36, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 48, 0, - 0, 1, 80, 0, 0, 7, - 34, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 3, 0, 4, 3, 26, 0, - 16, 0, 36, 0, 0, 0, - 79, 0, 0, 7, 34, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 27, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 0, 128, 131, 153, - 25, 0, 66, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 224, 17, 0, - 2, 0, 0, 0, 55, 0, - 0, 9, 66, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 36, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 85, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 25, 0, - 0, 0, 1, 0, 0, 10, - 242, 0, 16, 0, 37, 0, - 0, 0, 246, 15, 16, 0, - 36, 0, 0, 0, 2, 64, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 4, 0, - 0, 0, 8, 0, 0, 0, - 39, 0, 0, 10, 242, 0, - 16, 0, 38, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 140, 0, - 0, 16, 242, 0, 16, 0, - 39, 0, 0, 0, 2, 64, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 6, 32, 2, 0, 70, 14, - 16, 0, 38, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 39, 0, 0, 0, 190, 24, - 0, 1, 31, 0, 4, 3, - 10, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 39, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 39, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 39, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 39, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 40, 0, 0, 0, 26, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 40, 0, 0, 0, 42, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 39, 0, 0, 0, 70, 14, - 16, 0, 39, 0, 0, 0, - 70, 14, 16, 0, 40, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 39, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 26, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 39, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 39, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 39, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 39, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 40, 0, - 0, 0, 26, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 6, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 40, 0, - 0, 0, 26, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 40, 0, - 0, 0, 10, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 39, 0, - 0, 0, 70, 14, 16, 0, - 39, 0, 0, 0, 70, 14, - 16, 0, 40, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 39, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 39, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 39, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 39, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 42, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 39, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 39, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 39, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 39, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 40, 0, 0, 0, - 42, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 40, 0, 0, 0, - 26, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 40, 0, 0, 0, - 42, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 40, 0, 0, 0, - 42, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 39, 0, 0, 0, - 70, 14, 16, 0, 39, 0, - 0, 0, 70, 14, 16, 0, - 40, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 39, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 39, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 39, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 39, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 39, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 39, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 8, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 39, 0, 0, 0, 70, 14, - 16, 0, 39, 0, 0, 0, - 70, 14, 16, 0, 40, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 39, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 39, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 5, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 39, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 39, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 39, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 39, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 40, 0, - 0, 0, 10, 0, 16, 0, - 6, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 40, 0, - 0, 0, 26, 0, 16, 0, - 13, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 40, 0, - 0, 0, 10, 0, 16, 0, - 14, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 40, 0, - 0, 0, 42, 0, 16, 0, - 13, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 39, 0, - 0, 0, 70, 14, 16, 0, - 39, 0, 0, 0, 70, 14, - 16, 0, 40, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 39, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 39, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 39, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 39, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 5, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 38, 0, 0, 0, 42, 0, - 16, 0, 10, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 140, 0, - 0, 11, 130, 0, 16, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 4, 0, 0, 0, - 1, 64, 0, 0, 5, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 11, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 1, 64, 0, 0, 0, 16, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 31, 0, 4, 3, - 26, 0, 16, 0, 36, 0, - 0, 0, 30, 0, 0, 7, - 34, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 87, 0, 0, 7, 34, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 32, 0, - 0, 10, 226, 0, 16, 0, - 38, 0, 0, 0, 86, 14, - 16, 0, 38, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 7, - 18, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 38, 0, 0, 0, - 1, 0, 0, 7, 34, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 87, 0, - 0, 7, 18, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 38, 0, - 0, 0, 1, 0, 0, 7, - 34, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 87, 0, 0, 7, 18, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 38, 0, 0, 0, 1, 0, - 0, 7, 34, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 138, 0, 0, 8, - 34, 0, 16, 0, 36, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 134, 0, - 0, 5, 34, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 36, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 28, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 224, 17, 0, 2, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 36, 0, - 0, 0, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 10, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 11, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 87, 0, - 0, 7, 194, 0, 16, 0, - 36, 0, 0, 0, 166, 14, - 16, 0, 2, 0, 0, 0, - 86, 9, 16, 0, 37, 0, - 0, 0, 1, 0, 0, 7, - 66, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 87, 0, 0, 7, 130, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 5, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 1, 0, - 0, 7, 66, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 36, 0, - 0, 0, 87, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 5, 0, 0, 0, 10, 0, - 16, 0, 38, 0, 0, 0, - 1, 0, 0, 7, 66, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 42, 0, 16, 0, - 36, 0, 0, 0, 134, 0, - 0, 5, 66, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 11, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 21, 0, - 0, 1, 30, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 36, 0, 0, 0, - 10, 0, 16, 0, 36, 0, - 0, 0, 1, 64, 0, 0, - 32, 0, 0, 0, 22, 0, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 22, 0, - 0, 0, 79, 0, 0, 7, - 130, 0, 16, 0, 32, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 10, 0, - 16, 0, 25, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 27, 0, - 0, 0, 10, 0, 16, 0, - 36, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 34, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 55, 0, 0, 9, 34, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 85, 0, 0, 7, 66, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 23, 0, 0, 0, 1, 0, - 0, 10, 242, 0, 16, 0, - 37, 0, 0, 0, 166, 10, - 16, 0, 36, 0, 0, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 4, 0, 0, 0, 8, 0, - 0, 0, 39, 0, 0, 10, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 140, 0, 0, 16, 242, 0, - 16, 0, 37, 0, 0, 0, - 2, 64, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 6, 32, 2, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 23, 0, - 0, 0, 31, 0, 4, 3, - 10, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 37, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 38, 0, 0, 0, 26, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 38, 0, 0, 0, 42, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 38, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 23, 0, 0, 0, 31, 0, - 4, 3, 26, 0, 16, 0, - 7, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 37, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 38, 0, 0, 0, - 26, 0, 16, 0, 3, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 38, 0, 0, 0, - 26, 0, 16, 0, 9, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 8, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 21, 0, 0, 1, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 31, 0, 4, 3, 42, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 8, 18, 0, - 16, 0, 37, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 37, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 37, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 18, 0, 16, 0, 38, 0, - 0, 0, 42, 0, 16, 0, - 3, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 34, 0, 16, 0, 38, 0, - 0, 0, 26, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 66, 0, 16, 0, 38, 0, - 0, 0, 42, 0, 16, 0, - 9, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 167, 0, 0, 9, - 130, 0, 16, 0, 38, 0, - 0, 0, 42, 0, 16, 0, - 8, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 240, 17, 0, 3, 0, - 0, 0, 60, 0, 0, 7, - 242, 0, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 38, 0, 0, 0, - 168, 0, 0, 8, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 32, 2, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 26, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 26, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 42, 0, 16, 0, 37, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 12, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 190, 24, - 0, 1, 31, 0, 4, 3, - 58, 0, 16, 0, 23, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 7, 0, - 0, 0, 167, 0, 0, 8, - 18, 0, 16, 0, 37, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 37, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 18, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 34, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 8, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 9, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 167, 0, - 0, 9, 130, 0, 16, 0, - 38, 0, 0, 0, 10, 0, - 16, 0, 13, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 60, 0, - 0, 7, 242, 0, 16, 0, - 37, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 38, 0, - 0, 0, 168, 0, 0, 8, - 18, 240, 17, 0, 3, 0, - 0, 0, 10, 32, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 26, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 37, 0, 0, 0, 168, 0, - 0, 9, 18, 240, 17, 0, - 3, 0, 0, 0, 42, 0, - 16, 0, 12, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 37, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 190, 24, 0, 1, 31, 0, - 4, 3, 58, 0, 16, 0, - 23, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 5, 0, 0, 0, 167, 0, - 0, 8, 18, 0, 16, 0, - 37, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 6, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 38, 0, 0, 0, - 26, 0, 16, 0, 13, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 14, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 38, 0, 0, 0, - 42, 0, 16, 0, 13, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 60, 0, 0, 7, 242, 0, - 16, 0, 37, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 70, 14, 16, 0, - 38, 0, 0, 0, 168, 0, - 0, 8, 18, 240, 17, 0, - 3, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 10, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 26, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 26, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 37, 0, 0, 0, - 168, 0, 0, 9, 18, 240, - 17, 0, 3, 0, 0, 0, - 42, 0, 16, 0, 12, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 37, 0, 0, 0, - 21, 0, 0, 1, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 167, 0, 0, 9, 18, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 5, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 34, 0, - 16, 0, 37, 0, 0, 0, - 10, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 66, 0, - 16, 0, 37, 0, 0, 0, - 26, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 37, 0, 0, 0, - 42, 0, 16, 0, 10, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 1, 0, 0, 10, 242, 0, - 16, 0, 38, 0, 0, 0, - 166, 10, 16, 0, 36, 0, - 0, 0, 2, 64, 0, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 4, 0, 0, 0, - 8, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 10, 0, - 16, 0, 38, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 87, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 37, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 39, 0, 0, 10, 114, 0, - 16, 0, 38, 0, 0, 0, - 150, 7, 16, 0, 38, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 0, - 0, 10, 114, 0, 16, 0, - 38, 0, 0, 0, 70, 2, - 16, 0, 38, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 7, - 114, 0, 16, 0, 38, 0, - 0, 0, 150, 7, 16, 0, - 37, 0, 0, 0, 70, 2, - 16, 0, 38, 0, 0, 0, - 1, 0, 0, 7, 130, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 10, 0, 16, 0, - 38, 0, 0, 0, 1, 0, - 0, 7, 130, 0, 16, 0, - 36, 0, 0, 0, 26, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 1, 0, 0, 7, - 130, 0, 16, 0, 36, 0, - 0, 0, 42, 0, 16, 0, - 38, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 140, 0, 0, 11, 66, 0, - 16, 0, 36, 0, 0, 0, - 1, 64, 0, 0, 4, 0, - 0, 0, 1, 64, 0, 0, - 5, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 7, - 66, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 11, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 30, 0, 0, 7, 66, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 36, 0, - 0, 0, 1, 64, 0, 0, - 0, 16, 0, 0, 167, 0, - 0, 9, 66, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 240, 17, 0, - 3, 0, 0, 0, 138, 0, - 0, 8, 130, 0, 16, 0, - 36, 0, 0, 0, 10, 32, - 2, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 134, 0, 0, 5, 130, 0, - 16, 0, 36, 0, 0, 0, - 58, 0, 16, 0, 36, 0, - 0, 0, 30, 0, 0, 7, - 66, 0, 16, 0, 36, 0, - 0, 0, 58, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 18, 0, 0, 1, 54, 0, - 0, 8, 242, 0, 16, 0, - 37, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 66, 0, - 16, 0, 36, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 21, 0, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 32, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 42, 0, 16, 0, - 36, 0, 0, 0, 168, 0, - 0, 9, 18, 224, 17, 0, - 2, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 21, 0, - 0, 1, 190, 24, 0, 1, - 31, 0, 4, 3, 58, 0, - 16, 0, 23, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 7, 0, 0, 0, - 167, 0, 0, 9, 130, 0, - 16, 0, 32, 0, 0, 0, - 42, 0, 16, 0, 11, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 3, 0, 0, 0, - 87, 0, 0, 7, 98, 0, - 16, 0, 36, 0, 0, 0, - 166, 11, 16, 0, 2, 0, - 0, 0, 6, 1, 16, 0, - 37, 0, 0, 0, 1, 0, - 0, 7, 34, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 87, 0, 0, 7, - 194, 0, 16, 0, 36, 0, - 0, 0, 6, 4, 16, 0, - 5, 0, 0, 0, 166, 14, - 16, 0, 37, 0, 0, 0, - 1, 0, 0, 7, 34, 0, - 16, 0, 36, 0, 0, 0, - 42, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 1, 0, - 0, 7, 34, 0, 16, 0, - 36, 0, 0, 0, 58, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 134, 0, 0, 5, - 34, 0, 16, 0, 36, 0, - 0, 0, 26, 0, 16, 0, - 36, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 32, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 26, 0, 16, 0, 36, 0, - 0, 0, 168, 0, 0, 9, - 18, 240, 17, 0, 3, 0, - 0, 0, 42, 0, 16, 0, - 11, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 21, 0, 0, 1, - 21, 0, 0, 1, 21, 0, - 0, 1, 30, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 4, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 54, 0, 0, 5, - 130, 0, 16, 0, 28, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 22, 0, 0, 1, 54, 0, - 0, 4, 130, 0, 16, 0, - 19, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 33, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 3, 0, - 4, 3, 10, 0, 16, 0, - 21, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 0, 128, 131, 153, - 25, 0, 130, 0, 16, 0, - 22, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 224, 17, 0, - 2, 0, 0, 0, 42, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 1, 64, 0, 0, 16, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 255, 255, 255, 255, - 167, 0, 0, 139, 2, 35, - 0, 128, 131, 153, 25, 0, - 18, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 224, 17, 0, 2, 0, - 0, 0, 42, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 16, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 23, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 55, 0, - 0, 9, 18, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 23, 0, 0, 0, 39, 0, - 0, 7, 130, 0, 16, 0, - 23, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 31, 0, 4, 3, - 58, 0, 16, 0, 23, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 22, 0, - 0, 0, 42, 0, 16, 0, - 19, 0, 0, 0, 58, 0, - 16, 0, 22, 0, 0, 0, - 168, 0, 0, 9, 18, 224, - 17, 0, 2, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 168, 0, 0, 9, - 18, 224, 17, 0, 2, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 21, 0, 0, 1, - 30, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 4, 0, 0, 22, 0, - 0, 1, 165, 0, 0, 7, - 50, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 96, 0, 0, 0, 70, 240, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 4, 130, 0, - 16, 0, 19, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 33, 0, 0, 7, - 18, 0, 16, 0, 21, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 10, 0, - 16, 0, 21, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 25, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 18, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 1, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 37, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 238, 17, 0, - 1, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 21, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 168, 0, 0, 9, - 242, 224, 17, 0, 0, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 14, 16, 0, 37, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 84, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 56, 0, 0, 7, 18, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 165, 0, - 0, 7, 130, 0, 16, 0, - 22, 0, 0, 0, 1, 64, - 0, 0, 100, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 23, 0, - 0, 0, 1, 64, 0, 0, - 112, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 54, 0, 0, 4, 18, 0, - 16, 0, 25, 0, 0, 0, - 10, 32, 2, 0, 48, 0, - 0, 1, 33, 0, 0, 7, - 34, 0, 16, 0, 25, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 3, 0, 4, 3, 26, 0, - 16, 0, 25, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 22, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 34, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 1, 0, 0, 7, 34, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 25, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 37, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 238, 17, 0, - 0, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 23, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 226, 0, 16, 0, - 36, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 121, 16, 0, - 14, 0, 0, 0, 17, 0, - 0, 8, 66, 0, 16, 0, - 25, 0, 0, 0, 70, 14, - 16, 0, 37, 0, 0, 0, - 70, 158, 144, 0, 26, 0, - 16, 0, 23, 0, 0, 0, - 50, 0, 0, 9, 66, 0, - 16, 0, 25, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 42, 0, - 16, 0, 20, 0, 0, 0, - 51, 0, 0, 7, 66, 0, - 16, 0, 25, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 255, 66, 52, 0, - 0, 7, 66, 0, 16, 0, - 25, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 8, - 130, 0, 16, 0, 25, 0, - 0, 0, 70, 14, 16, 0, - 37, 0, 0, 0, 70, 158, - 144, 0, 42, 0, 16, 0, - 23, 0, 0, 0, 50, 0, - 0, 9, 130, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 20, 0, 0, 0, 51, 0, - 0, 7, 130, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 25, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 255, 66, 52, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 27, 0, 0, 5, 194, 0, - 16, 0, 25, 0, 0, 0, - 166, 14, 16, 0, 25, 0, - 0, 0, 35, 0, 0, 9, - 66, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 128, 0, 0, 0, - 42, 0, 16, 0, 25, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 1, 64, - 0, 0, 0, 1, 0, 0, - 0, 0, 0, 7, 130, 0, - 16, 0, 27, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 52, 54, 0, - 0, 8, 114, 0, 16, 0, - 38, 0, 0, 0, 2, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 130, 0, - 16, 0, 28, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 54, 0, 0, 5, - 130, 0, 16, 0, 32, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 48, 0, - 0, 1, 34, 0, 0, 7, - 130, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 58, 0, - 16, 0, 32, 0, 0, 0, - 3, 0, 4, 3, 58, 0, - 16, 0, 38, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 38, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 32, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 18, 0, - 16, 0, 39, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 30, 0, 0, 10, 226, 0, - 16, 0, 39, 0, 0, 0, - 246, 15, 16, 0, 38, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 130, 0, - 16, 0, 38, 0, 0, 0, - 26, 0, 16, 0, 39, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 0, 128, 131, 153, 25, 0, - 34, 0, 16, 0, 39, 0, - 0, 0, 42, 0, 16, 0, - 39, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 224, 17, 0, 2, 0, - 0, 0, 167, 0, 0, 139, - 2, 35, 0, 128, 131, 153, - 25, 0, 66, 0, 16, 0, - 39, 0, 0, 0, 58, 0, - 16, 0, 39, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 6, 224, 17, 0, - 2, 0, 0, 0, 84, 0, - 0, 7, 18, 0, 16, 0, - 39, 0, 0, 0, 58, 0, - 16, 0, 38, 0, 0, 0, - 10, 0, 16, 0, 39, 0, - 0, 0, 84, 0, 0, 7, - 18, 0, 16, 0, 39, 0, - 0, 0, 26, 0, 16, 0, - 39, 0, 0, 0, 10, 0, - 16, 0, 39, 0, 0, 0, - 36, 0, 0, 7, 130, 0, - 16, 0, 38, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 26, 0, 16, 0, - 39, 0, 0, 0, 36, 0, - 0, 7, 130, 0, 16, 0, - 38, 0, 0, 0, 42, 0, - 16, 0, 39, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 36, 0, 0, 7, - 130, 0, 16, 0, 38, 0, - 0, 0, 58, 0, 16, 0, - 38, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 226, 0, - 16, 0, 39, 0, 0, 0, - 6, 9, 16, 0, 38, 0, - 0, 0, 54, 0, 0, 5, - 18, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 28, 0, 0, 0, 54, 0, - 0, 5, 34, 0, 16, 0, - 40, 0, 0, 0, 10, 0, - 16, 0, 39, 0, 0, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 66, 0, 16, 0, - 40, 0, 0, 0, 26, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 38, 0, - 0, 0, 3, 0, 4, 3, - 42, 0, 16, 0, 40, 0, - 0, 0, 39, 0, 0, 7, - 66, 0, 16, 0, 40, 0, - 0, 0, 10, 0, 16, 0, - 25, 0, 0, 0, 26, 0, - 16, 0, 40, 0, 0, 0, - 31, 0, 4, 3, 42, 0, - 16, 0, 40, 0, 0, 0, - 30, 0, 0, 7, 66, 0, - 16, 0, 40, 0, 0, 0, - 26, 0, 16, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 40, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 242, 0, - 16, 0, 41, 0, 0, 0, - 42, 0, 16, 0, 40, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 70, 238, - 17, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 114, 0, - 16, 0, 41, 0, 0, 0, - 70, 2, 16, 0, 37, 0, - 0, 0, 70, 2, 16, 128, - 65, 0, 0, 0, 41, 0, - 0, 0, 16, 0, 0, 7, - 66, 0, 16, 0, 40, 0, - 0, 0, 70, 2, 16, 0, - 41, 0, 0, 0, 70, 2, - 16, 0, 41, 0, 0, 0, - 49, 0, 0, 7, 130, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 21, 0, - 0, 0, 42, 0, 16, 0, - 40, 0, 0, 0, 31, 0, - 4, 3, 58, 0, 16, 0, - 40, 0, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 40, 0, 0, 0, 26, 0, - 16, 0, 40, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 54, 0, 0, 5, - 34, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 40, 0, 0, 0, 7, 0, - 0, 1, 21, 0, 0, 1, - 165, 0, 0, 7, 130, 0, - 16, 0, 40, 0, 0, 0, - 1, 64, 0, 0, 112, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 39, 0, - 0, 7, 18, 0, 16, 0, - 42, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 31, 0, 4, 3, - 10, 0, 16, 0, 42, 0, - 0, 0, 165, 0, 0, 7, - 18, 0, 16, 0, 42, 0, - 0, 0, 1, 64, 0, 0, - 100, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 42, 0, 0, 0, - 26, 0, 16, 0, 40, 0, - 0, 0, 10, 0, 16, 0, - 42, 0, 0, 0, 167, 0, - 0, 139, 2, 35, 0, 128, - 131, 153, 25, 0, 18, 0, - 16, 0, 42, 0, 0, 0, - 10, 0, 16, 0, 42, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 224, - 17, 0, 2, 0, 0, 0, - 1, 0, 0, 7, 18, 0, - 16, 0, 42, 0, 0, 0, - 10, 0, 16, 0, 42, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 0, 0, 30, 0, - 0, 7, 130, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 42, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 114, 0, 16, 0, - 42, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 114, 16, 0, - 14, 0, 0, 0, 0, 0, - 0, 8, 114, 0, 16, 0, - 42, 0, 0, 0, 150, 7, - 16, 0, 36, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 42, 0, 0, 0, - 16, 0, 0, 7, 130, 0, - 16, 0, 40, 0, 0, 0, - 70, 2, 16, 0, 42, 0, - 0, 0, 70, 2, 16, 0, - 42, 0, 0, 0, 29, 0, - 0, 7, 18, 0, 16, 0, - 42, 0, 0, 0, 10, 0, - 16, 0, 21, 0, 0, 0, - 58, 0, 16, 0, 40, 0, - 0, 0, 31, 0, 4, 3, - 10, 0, 16, 0, 42, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 42, 0, - 0, 0, 26, 0, 16, 0, - 40, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 54, 0, 0, 5, 34, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 42, 0, - 0, 0, 7, 0, 0, 1, - 21, 0, 0, 1, 0, 0, - 0, 7, 130, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 52, 14, 0, 0, 7, - 130, 0, 16, 0, 40, 0, - 0, 0, 10, 0, 16, 0, - 21, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 40, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 40, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 128, 191, - 51, 0, 0, 7, 130, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 40, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 18, 0, - 0, 1, 54, 0, 0, 5, - 130, 0, 16, 0, 40, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 21, 0, - 0, 1, 0, 0, 0, 7, - 66, 0, 16, 0, 40, 0, - 0, 0, 42, 0, 16, 0, - 40, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 52, - 68, 0, 0, 5, 66, 0, - 16, 0, 40, 0, 0, 0, - 42, 0, 16, 0, 40, 0, - 0, 0, 50, 0, 0, 9, - 66, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 40, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 128, 191, 52, 0, 0, 7, - 66, 0, 16, 0, 40, 0, - 0, 0, 42, 0, 16, 0, - 40, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 56, 0, 0, 7, 18, 0, - 16, 0, 42, 0, 0, 0, - 42, 0, 16, 0, 40, 0, - 0, 0, 42, 0, 16, 0, - 40, 0, 0, 0, 56, 0, - 0, 7, 130, 0, 16, 0, - 40, 0, 0, 0, 58, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 42, 0, - 0, 0, 0, 0, 0, 7, - 130, 0, 16, 0, 41, 0, - 0, 0, 58, 0, 16, 0, - 27, 0, 0, 0, 58, 0, - 16, 0, 41, 0, 0, 0, - 14, 0, 0, 7, 130, 0, - 16, 0, 40, 0, 0, 0, - 58, 0, 16, 0, 40, 0, - 0, 0, 58, 0, 16, 0, - 41, 0, 0, 0, 50, 0, - 0, 9, 226, 0, 16, 0, - 39, 0, 0, 0, 246, 15, - 16, 0, 40, 0, 0, 0, - 6, 9, 16, 0, 41, 0, - 0, 0, 86, 14, 16, 0, - 39, 0, 0, 0, 0, 0, - 0, 7, 18, 0, 16, 0, - 40, 0, 0, 0, 42, 0, - 16, 0, 40, 0, 0, 0, - 10, 0, 16, 0, 40, 0, - 0, 0, 21, 0, 0, 1, - 30, 0, 0, 7, 34, 0, - 16, 0, 40, 0, 0, 0, - 26, 0, 16, 0, 40, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 22, 0, - 0, 1, 54, 0, 0, 5, - 114, 0, 16, 0, 38, 0, - 0, 0, 150, 7, 16, 0, - 39, 0, 0, 0, 54, 0, - 0, 5, 130, 0, 16, 0, - 28, 0, 0, 0, 10, 0, - 16, 0, 40, 0, 0, 0, - 30, 0, 0, 7, 130, 0, - 16, 0, 32, 0, 0, 0, - 58, 0, 16, 0, 32, 0, - 0, 0, 1, 64, 0, 0, - 128, 0, 0, 0, 22, 0, - 0, 1, 165, 0, 0, 7, - 66, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 72, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 56, 0, 0, 7, 66, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 37, 0, - 0, 0, 42, 0, 16, 0, - 25, 0, 0, 0, 14, 0, - 0, 7, 66, 0, 16, 0, - 25, 0, 0, 0, 42, 0, - 16, 0, 25, 0, 0, 0, - 58, 0, 16, 0, 28, 0, - 0, 0, 165, 0, 0, 7, - 130, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 96, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 30, 0, 0, 7, 34, 0, - 16, 0, 25, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 58, 0, 16, 0, - 25, 0, 0, 0, 167, 0, - 0, 139, 2, 131, 0, 128, - 131, 153, 25, 0, 226, 0, - 16, 0, 36, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 233, - 17, 0, 1, 0, 0, 0, - 50, 0, 0, 9, 226, 0, - 16, 0, 36, 0, 0, 0, - 6, 9, 16, 0, 38, 0, - 0, 0, 166, 10, 16, 0, - 25, 0, 0, 0, 86, 14, - 16, 0, 36, 0, 0, 0, - 168, 0, 0, 9, 114, 224, - 17, 0, 1, 0, 0, 0, - 26, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 150, 7, - 16, 0, 36, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 25, 0, 0, 0, - 10, 0, 16, 0, 25, 0, - 0, 0, 1, 64, 0, 0, - 0, 4, 0, 0, 22, 0, - 0, 1, 190, 24, 0, 1, - 165, 0, 0, 7, 130, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 96, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 54, 0, - 0, 4, 18, 0, 16, 0, - 20, 0, 0, 0, 10, 32, - 2, 0, 48, 0, 0, 1, - 33, 0, 0, 7, 34, 0, - 16, 0, 20, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 26, 0, 16, 0, - 19, 0, 0, 0, 3, 0, - 4, 3, 26, 0, 16, 0, - 20, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 167, 0, 0, 139, - 2, 131, 0, 128, 131, 153, - 25, 0, 242, 0, 16, 0, - 25, 0, 0, 0, 26, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 238, 17, 0, - 1, 0, 0, 0, 30, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 26, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 20, 0, - 0, 0, 168, 0, 0, 9, - 242, 224, 17, 0, 0, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 14, 16, 0, 25, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 165, 0, - 0, 7, 34, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 100, 0, 0, 0, - 6, 240, 17, 0, 0, 0, - 0, 0, 54, 0, 0, 4, - 130, 0, 16, 0, 19, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 33, 0, - 0, 7, 18, 0, 16, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 3, 0, 4, 3, - 10, 0, 16, 0, 20, 0, - 0, 0, 30, 0, 0, 7, - 18, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 167, 0, 0, 139, 2, 35, - 0, 128, 131, 153, 25, 0, - 18, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 224, 17, 0, 2, 0, - 0, 0, 85, 0, 0, 7, - 18, 0, 16, 0, 20, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 16, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 20, 0, 0, 0, - 42, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 20, 0, 0, 0, 168, 0, - 0, 9, 18, 224, 17, 0, - 2, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 30, 0, - 0, 7, 34, 0, 16, 0, - 20, 0, 0, 0, 10, 0, - 16, 0, 20, 0, 0, 0, - 1, 64, 0, 0, 1, 0, - 0, 0, 168, 0, 0, 9, - 18, 224, 17, 0, 2, 0, - 0, 0, 26, 0, 16, 0, - 20, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 255, 255, - 255, 255, 30, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 4, 0, 0, - 22, 0, 0, 1, 21, 0, - 0, 1, 31, 0, 0, 2, - 10, 32, 2, 0, 165, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 8, 0, 0, 0, - 6, 240, 17, 0, 1, 0, - 0, 0, 56, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 122, 68, - 28, 0, 0, 5, 18, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 83, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 1, 0, 0, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 104, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 30, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 166, 0, 0, 7, - 18, 240, 17, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 104, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 21, 0, 0, 1, 190, 24, - 0, 1, 165, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 104, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 165, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 104, 0, - 0, 0, 6, 240, 17, 0, - 0, 0, 0, 0, 80, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 31, 0, 4, 3, - 10, 0, 16, 0, 19, 0, - 0, 0, 165, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 34, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 4, - 66, 0, 16, 0, 19, 0, - 0, 0, 10, 32, 2, 0, - 48, 0, 0, 1, 80, 0, - 0, 7, 130, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 3, 0, 4, 3, - 58, 0, 16, 0, 19, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 26, 0, 16, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 114, 0, 16, 0, 20, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 70, 226, 17, 0, 0, 0, - 0, 0, 30, 0, 0, 7, - 130, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 167, 0, 0, 139, 2, 131, - 0, 128, 131, 153, 25, 0, - 226, 0, 16, 0, 23, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 1, 64, - 0, 0, 0, 0, 0, 0, - 6, 233, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 8, - 114, 0, 16, 0, 20, 0, - 0, 0, 70, 2, 16, 0, - 20, 0, 0, 0, 150, 7, - 16, 128, 65, 0, 0, 0, - 23, 0, 0, 0, 52, 0, - 0, 9, 130, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 128, 129, 0, 0, 0, - 20, 0, 0, 0, 10, 0, - 16, 128, 129, 0, 0, 0, - 20, 0, 0, 0, 52, 0, - 0, 8, 130, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 128, 129, 0, 0, 0, - 20, 0, 0, 0, 58, 0, - 16, 0, 19, 0, 0, 0, - 52, 0, 0, 7, 34, 0, - 16, 0, 19, 0, 0, 0, - 26, 0, 16, 0, 19, 0, - 0, 0, 58, 0, 16, 0, - 19, 0, 0, 0, 30, 0, - 0, 7, 66, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 0, 4, - 0, 0, 22, 0, 0, 1, - 31, 0, 0, 2, 10, 32, - 2, 0, 165, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 100, 0, 0, 0, 6, 240, - 17, 0, 1, 0, 0, 0, - 30, 0, 0, 7, 18, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 166, 0, - 0, 7, 18, 240, 17, 0, - 1, 0, 0, 0, 1, 64, - 0, 0, 100, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 165, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 104, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 104, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 30, 0, - 0, 8, 18, 0, 16, 0, - 19, 0, 0, 0, 10, 0, - 16, 128, 65, 0, 0, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 166, 0, 0, 7, 18, 240, - 17, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 104, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 21, 0, - 0, 1, 165, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 1, 64, 0, 0, - 112, 0, 0, 0, 6, 240, - 17, 0, 0, 0, 0, 0, - 165, 0, 0, 7, 66, 0, - 16, 0, 19, 0, 0, 0, - 1, 64, 0, 0, 8, 0, - 0, 0, 6, 240, 17, 0, - 1, 0, 0, 0, 56, 0, - 0, 7, 18, 0, 16, 0, - 19, 0, 0, 0, 42, 0, - 16, 0, 19, 0, 0, 0, - 10, 0, 16, 0, 19, 0, - 0, 0, 49, 0, 0, 7, - 18, 0, 16, 0, 19, 0, - 0, 0, 10, 0, 16, 0, - 19, 0, 0, 0, 26, 0, - 16, 0, 19, 0, 0, 0, - 31, 0, 4, 3, 10, 0, - 16, 0, 19, 0, 0, 0, - 166, 0, 0, 7, 18, 240, - 17, 0, 1, 0, 0, 0, - 1, 64, 0, 0, 100, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 1, 21, 0, 0, 1, - 30, 0, 0, 7, 18, 0, - 16, 0, 17, 0, 0, 0, - 10, 0, 16, 0, 17, 0, - 0, 0, 1, 64, 0, 0, - 1, 0, 0, 0, 22, 0, - 0, 1, 190, 24, 0, 1, - 21, 0, 0, 1, 31, 0, - 0, 2, 10, 32, 2, 0, - 165, 0, 0, 7, 242, 0, - 16, 0, 0, 0, 0, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 254, 17, 0, - 1, 0, 0, 0, 165, 0, - 0, 7, 242, 0, 16, 0, - 1, 0, 0, 0, 1, 64, - 0, 0, 16, 0, 0, 0, - 70, 254, 17, 0, 1, 0, - 0, 0, 165, 0, 0, 7, - 242, 0, 16, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 32, 0, 0, 0, 70, 254, - 17, 0, 1, 0, 0, 0, - 165, 0, 0, 7, 242, 0, - 16, 0, 3, 0, 0, 0, - 1, 64, 0, 0, 48, 0, - 0, 0, 70, 254, 17, 0, - 1, 0, 0, 0, 165, 0, - 0, 7, 242, 0, 16, 0, - 4, 0, 0, 0, 1, 64, - 0, 0, 64, 0, 0, 0, - 70, 254, 17, 0, 1, 0, - 0, 0, 165, 0, 0, 7, - 242, 0, 16, 0, 5, 0, - 0, 0, 1, 64, 0, 0, - 80, 0, 0, 0, 70, 254, - 17, 0, 1, 0, 0, 0, - 165, 0, 0, 7, 242, 0, - 16, 0, 6, 0, 0, 0, - 1, 64, 0, 0, 96, 0, - 0, 0, 70, 254, 17, 0, - 1, 0, 0, 0, 165, 0, - 0, 7, 50, 0, 16, 0, - 7, 0, 0, 0, 1, 64, - 0, 0, 112, 0, 0, 0, - 70, 240, 17, 0, 1, 0, - 0, 0, 168, 0, 0, 8, - 242, 224, 17, 0, 3, 0, - 0, 0, 10, 16, 2, 0, - 1, 64, 0, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 0, 0, 0, 0, 168, 0, - 0, 8, 242, 224, 17, 0, - 3, 0, 0, 0, 10, 16, - 2, 0, 1, 64, 0, 0, - 16, 0, 0, 0, 70, 14, - 16, 0, 1, 0, 0, 0, - 168, 0, 0, 8, 242, 224, - 17, 0, 3, 0, 0, 0, - 10, 16, 2, 0, 1, 64, - 0, 0, 32, 0, 0, 0, - 70, 14, 16, 0, 2, 0, - 0, 0, 168, 0, 0, 8, - 242, 224, 17, 0, 3, 0, - 0, 0, 10, 16, 2, 0, - 1, 64, 0, 0, 48, 0, - 0, 0, 70, 14, 16, 0, - 3, 0, 0, 0, 168, 0, - 0, 8, 242, 224, 17, 0, - 3, 0, 0, 0, 10, 16, - 2, 0, 1, 64, 0, 0, - 64, 0, 0, 0, 70, 14, - 16, 0, 4, 0, 0, 0, - 168, 0, 0, 8, 242, 224, - 17, 0, 3, 0, 0, 0, - 10, 16, 2, 0, 1, 64, - 0, 0, 80, 0, 0, 0, - 70, 14, 16, 0, 5, 0, - 0, 0, 168, 0, 0, 8, - 242, 224, 17, 0, 3, 0, - 0, 0, 10, 16, 2, 0, - 1, 64, 0, 0, 96, 0, - 0, 0, 70, 14, 16, 0, - 6, 0, 0, 0, 168, 0, - 0, 8, 50, 224, 17, 0, - 3, 0, 0, 0, 10, 16, - 2, 0, 1, 64, 0, 0, - 112, 0, 0, 0, 70, 0, - 16, 0, 7, 0, 0, 0, - 21, 0, 0, 1, 62, 0, - 0, 1, 83, 84, 65, 84, - 148, 0, 0, 0, 108, 16, - 0, 0, 48, 0, 0, 0, - 4, 0, 0, 0, 2, 0, - 0, 0, 62, 4, 0, 0, - 185, 1, 0, 0, 23, 1, - 0, 0, 50, 0, 0, 0, - 23, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 164, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 184, 0, 0, 0, - 82, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 115, 0, 0, 0, - 0, 0, 0, 0, 50, 0, - 0, 0 -}; |