Ver Fonte

improve rendering performance by combining block models to chunk models

Kolja Strohm há 2 anos atrás
pai
commit
6059e124f5

+ 28 - 91
FactoryCraft/Block.cpp

@@ -13,7 +13,7 @@ Block::Block(const BlockType* zType,
     int maxHP,
     bool transparent,
     bool needRequestModelInfo)
-    : Model3D(),
+    : FactoryCraftModel(),
       zType(zType),
       location(pos),
       maxHP((float)maxHP),
@@ -21,21 +21,16 @@ Block::Block(const BlockType* zType,
 {
     hp = (float)maxHP;
     memset(sideVisible, 0, 6);
-    Model3D::setAlpha(transparent);
+    //Model3D::setAlpha(transparent);
     Model3D::setPosition(
         (Framework::Vec3<float>)pos + Framework::Vec3<float>{0.5f, 0.5f, 0.5f});
     setModelDaten(model);
     setModelTextur(texture);
-    breakTextur
-        = uiFactory.initParam.bildschirm->zGraphicsApi()->createOrGetTextur(
-            "blocks.ltdb/crack.png", 0);
     memset(lightData, 0, 6 * 6);
 }
 
 Block::~Block()
-{
-    breakTextur->release();
-}
+{}
 
 void Block::beforeRender(
     GraphicsApi* api, Shader* zVertexShader, Shader* zPixelShader)
@@ -45,35 +40,7 @@ void Block::beforeRender(
         needRequestModelInfo = 0;
         World::INSTANCE->zClient()->blockAPIRequest(location, "\0", 1);
     }
-    CustomDX11API* cApi = dynamic_cast<CustomDX11API*>(api);
-    if (cApi && model->getVertexAnzahl() == 24)
-    {
-        int count = 24;
-        zVertexShader->füllConstBuffer(
-            (char*)&count, cApi->getVertexShaderLightBufferIndex(), 4);
-        zVertexShader->füllConstBuffer(
-            lightBuffer, cApi->getVertexShaderLightBufferIndex() + 1, 24 * 4);
-    }
-    else if (cApi)
-    {
-        int count = 1;
-        zVertexShader->füllConstBuffer(
-            (char*)&count, cApi->getVertexShaderLightBufferIndex(), 4);
-        zVertexShader->füllConstBuffer(
-            lightBuffer, cApi->getVertexShaderLightBufferIndex() + 1, 4);
-    }
-}
-
-void Block::afterRender(
-    GraphicsApi* api, Shader* zVertexShader, Shader* zPixelShader)
-{
-    CustomDX11API* cApi = dynamic_cast<CustomDX11API*>(api);
-    if (cApi)
-    {
-        int count = 0;
-        zVertexShader->füllConstBuffer(
-            (char*)&count, cApi->getVertexShaderLightBufferIndex(), 4);
-    }
+    FactoryCraftModel::beforeRender(api, zVertexShader, zPixelShader);
 }
 
 void Block::api(char* message)
@@ -81,8 +48,22 @@ void Block::api(char* message)
     switch (message[0])
     {
     case 0: // hp change
-        hp = *(float*)(message + 1);
-        break;
+        {
+            hp = *(float*)(message + 1);
+            setDestroyedState(1 - hp / maxHP);
+            Model3D* mdl = World::INSTANCE->getCurrentTarget();
+            if (mdl == this)
+            {
+                if (zBlockType()->getModelInfo().getModelName().istGleich(
+                        "cube"))
+                {
+                    World::INSTANCE->zSelectedEffectModel()->setDestroyedState(
+                        1 - hp / maxHP);
+                }
+            }
+            if (mdl) mdl->release();
+            break;
+        }
     case 1: // model change
         {
             ByteArrayReader reader(message + 1, 10000, 0);
@@ -112,7 +93,6 @@ void Block::api(char* message)
 
 void Block::copyLightTo(Block* zB)
 {
-    memcpy(zB->lightBuffer, lightBuffer, 24 * 4);
     memcpy(zB->lightData, lightData, 6 * 6);
     memcpy(zB->sideVisible, sideVisible, 6);
 }
@@ -120,50 +100,18 @@ void Block::copyLightTo(Block* zB)
 void Block::setLightData(Direction dir, unsigned char* data)
 {
     memcpy(lightData + getDirectionIndex(dir) * 6, data, 6);
-    float dayLightFactor = 1.0; // TODO: day (1.f) - night (0.1f) adjustment
-    if (model->getVertexAnzahl() == 24)
-    {
-        const Vertex3D* verticies = model->zVertexBuffer();
-        for (int i = 0; i < 24; i++)
-        { // TODO: calculate rotations
-            Directions dirs = getDirectionsFromVector(verticies[i].pos);
-            Vec3<unsigned char> light(0, 0, 0);
-            for (int d = 0; d < 6; d++)
-            {
-                if ((dirs | getDirectionFromIndex(d)) == dirs)
-                {
-                    light = Vec3<unsigned char>(
-                        max((unsigned char)((float)lightData[d * 6]
-                                            * dayLightFactor),
-                            light.x),
-                        max((unsigned char)((float)lightData[d * 6 + 1]
-                                            * dayLightFactor),
-                            light.y),
-                        max((unsigned char)((float)lightData[d * 6 + 2]
-                                            * dayLightFactor),
-                            light.z));
-                    light = Vec3<float>(max(lightData[d * 6 + 3], light.x),
-                        max(lightData[d * 6 + 4], light.y),
-                        max(lightData[d * 6 + 5], light.z));
-                }
-            }
-            int l = ((((light.x << 8) | light.y) << 8) | light.z) << 8;
-            *(int*)(lightBuffer + i * 4) = l;
-        }
-    }
-    else if (dir == Direction::TOP)
-    {
-        Vec3<unsigned char> light = Vec3<unsigned char>(
-            max((unsigned char)((float)data[0] * dayLightFactor), data[3]),
-            max((unsigned char)((float)data[1] * dayLightFactor), data[4]),
-            max((unsigned char)((float)data[2] * dayLightFactor), data[5]));
-        int l = ((((light.x << 8) | light.y) << 8) | light.z) << 8;
-        *(int*)lightBuffer = l;
-    }
     if (data[0] | data[1] | data[2] | data[3] | data[4] | data[5])
         sideVisible[getDirectionIndex(dir)] = 1;
     else
         sideVisible[getDirectionIndex(dir)] = 0;
+    Chunk* zC = World::INSTANCE->zChunk(
+        World::INSTANCE->getChunkCenter(location.x, location.y));
+    if (zC) zC->setLightChanged();
+}
+
+const unsigned char* Block::getLightData(Direction dir) const
+{
+    return lightData + getDirectionIndex(dir) * 6;
 }
 
 bool Block::isVisible() const
@@ -188,17 +136,6 @@ Skeleton* Block::zSkeleton() const
     return skelett;
 }
 
-Textur* Block::zEffectTextur()
-{
-    if (hp < maxHP) return breakTextur;
-    return 0;
-}
-
-float Block::getEffectPercentage()
-{
-    return 1 - hp / maxHP;
-}
-
 Text Block::printLightInfo()
 {
     Text result = "NORTH[0;-1;0](";

+ 3 - 7
FactoryCraft/Block.h

@@ -5,13 +5,14 @@
 #include "Area.h"
 #include "BlockType.h"
 #include "Registries.h"
+#include "FactoryCraftModel.h"
 
 using namespace Framework;
 
 class BasicBlockItemType;
 class Chunk;
 
-class Block : public Model3D
+class Block : public FactoryCraftModel
 {
 protected:
     float hp;
@@ -19,15 +20,11 @@ protected:
     const BlockType* zType;
     bool sideVisible[6];
     Vec3<int> location;
-    Framework::Textur* breakTextur;
     unsigned char lightData[6 * 6];
-    char lightBuffer[24 * 4];
     char needRequestModelInfo;
 
     void beforeRender(
         GraphicsApi* api, Shader* zVertexShader, Shader* zPixelShader) override;
-    void afterRender(
-        GraphicsApi* api, Shader* zVertexShader, Shader* zPixelShader) override;
 
 public:
     Block(const BlockType* zType,
@@ -42,13 +39,12 @@ public:
     void api(char* message);
     void copyLightTo(Block* zB);
     void setLightData(Direction dir, unsigned char* data);
+    const unsigned char* getLightData(Direction dir) const;
     bool isVisible() const;
 
     Vec3<int> getLocation() const;
     const BlockType* zBlockType() const;
     Skeleton* zSkeleton() const;
-    Textur* zEffectTextur() override;
-    float getEffectPercentage() override;
     friend Chunk;
     Text printLightInfo();
 };

+ 6 - 0
FactoryCraft/BlockType.cpp

@@ -44,4 +44,10 @@ bool BlockType::doesNeedInstance() const
 bool BlockType::doesNeedModelSubscription() const
 {
     return needModelSubscription;
+}
+
+
+const ModelInfo& BlockType::getModelInfo() const
+{
+    return model;
 }

+ 2 - 0
FactoryCraft/BlockType.h

@@ -29,5 +29,7 @@ public:
     bool doesNeedInstance() const;
     bool doesNeedModelSubscription() const;
 
+    const ModelInfo &getModelInfo() const;
+
     int getId() const;
 };

+ 487 - 140
FactoryCraft/Chunk.cpp

@@ -1,25 +1,61 @@
 #include "Chunk.h"
 
+#include <Shader.h>
+
 #include "Constants.h"
+#include "CustomDX11API.h"
+#include "FactoryCraftModel.h"
 #include "Globals.h"
 #include "Registries.h"
 
 Chunk::Chunk(Framework::Punkt location)
     : ReferenceCounter(),
       location(location),
-      isLoading(0)
-{}
+      isLoading(0),
+      lightChanged(0)
+{
+    blocks = new Block*[CHUNK_SIZE * CHUNK_SIZE * WORLD_HEIGHT];
+    memset(blocks, 0, CHUNK_SIZE * CHUNK_SIZE * WORLD_HEIGHT * sizeof(Block*));
+    groundModel = new FactoryCraftModel();
+    Model3DData* chunkModel
+        = uiFactory.initParam.bildschirm->zGraphicsApi()->getModel(
+            Text("chunk_ground_") + location.x + location.y);
+    if (!chunkModel)
+    {
+        chunkModel
+            = uiFactory.initParam.bildschirm->zGraphicsApi()->createModel(
+                Text("chunk_ground_") + location.x + location.y);
+    }
+    chunkModel->setAmbientFactor(0.f);
+    chunkModel->setDiffusFactor(1.f);
+    chunkModel->setSpecularFactor(0.f);
+    chunkModel->setVertecies(0, 0);
+    groundModel->setModelDaten(chunkModel);
+    groundModel->setPosition(
+        (float)location.x, (float)location.y, (float)WORLD_HEIGHT / 2.f);
+}
 
 Chunk::Chunk(Framework::Punkt location, Framework::StreamReader* zReader)
     : Chunk(location)
 {
     load(zReader);
+    buildGroundModel();
 }
 
 Chunk::~Chunk()
 {
     char msg = 1; // remove observer
     World::INSTANCE->zClient()->chunkAPIRequest(location, &msg, 1);
+    for (int i = 0; i < CHUNK_SIZE * CHUNK_SIZE * WORLD_HEIGHT; i++)
+    {
+        if (blocks[i])
+        {
+            blocks[i]->release();
+            blocks[i] = 0;
+        }
+    }
+    delete[] blocks;
+    groundModel->release();
 }
 
 void Chunk::appendAnimation(
@@ -44,146 +80,17 @@ void Chunk::appendAnimation(
     acs.unlock();
 }
 
-void Chunk::api(char* message)
-{
-    switch (message[0])
-    {
-    case 0: // set block
-        {
-            int index = *(int*)(message + 1);
-            int id = *(int*)(message + 5);
-            Framework::Vec3<int> location((index / WORLD_HEIGHT) / CHUNK_SIZE,
-                (index / WORLD_HEIGHT) % CHUNK_SIZE,
-                index % WORLD_HEIGHT);
-            location.x += this->location.x - CHUNK_SIZE / 2;
-            location.y += this->location.y - CHUNK_SIZE / 2;
-            if (blockTypes[id]->doesNeedInstance())
-            {
-                Block* zB = blockTypes[id]->createBlock(location);
-                setBlock(zB);
-            }
-            else
-            {
-                Block* zB = zBlockAt(location);
-                if (zB) removeBlock(zB);
-            }
-            break;
-        }
-    case 1: // animate block
-        {
-            int index = *(int*)(message + 1);
-            int boneId = *(int*)(message + 5);
-            double time = *(double*)(message + 9);
-            Framework::Vec3<float> pos;
-            pos.x = *(float*)(message + 17);
-            pos.y = *(float*)(message + 21);
-            pos.z = *(float*)(message + 25);
-            Framework::Vec3<float> rot;
-            rot.x = *(float*)(message + 29);
-            rot.y = *(float*)(message + 33);
-            rot.z = *(float*)(message + 37);
-            Framework::Vec3<int> location((index / WORLD_HEIGHT) / CHUNK_SIZE,
-                (index / WORLD_HEIGHT) % CHUNK_SIZE,
-                index % WORLD_HEIGHT);
-            location.x += this->location.x - CHUNK_SIZE / 2;
-            location.y += this->location.y - CHUNK_SIZE / 2;
-            Block* zB = zBlockAt(location);
-            if (zB) appendAnimation(zB, boneId, time, pos, rot);
-            break;
-        }
-    }
-}
-
-Block* Chunk::zBlockAt(Framework::Vec3<int> location)
-{
-    cs.lock();
-    for (Block* b : blocks)
-    {
-        if (b->getLocation() == location)
-        {
-            cs.unlock();
-            return b;
-        }
-    }
-    cs.unlock();
-    return 0;
-}
-
-void Chunk::setBlock(Block* block)
-{
-    cs.lock();
-    Framework::Vec3<int> pos = block->getLocation();
-    for (Framework::Iterator<Block*> iterator = blocks.begin(); iterator;
-         iterator++)
-    {
-        if (pos == iterator->getLocation())
-        {
-            vcs.lock();
-            for (Framework::Iterator<Block*> vi = visibleBlocks.begin(); vi;
-                 vi++)
-            {
-                if ((Block*)iterator == (Block*)vi)
-                {
-                    vi.remove();
-                    break;
-                }
-            }
-            vcs.unlock();
-            iterator->copyLightTo(block);
-            iterator->release();
-            iterator.set(block);
-            cs.unlock();
-            vcs.lock();
-            if (block->isVisible())
-            {
-                block->tick(0);
-                visibleBlocks.add(block);
-            }
-            vcs.unlock();
-            return;
-        }
-    }
-    blocks.add(block);
-    cs.unlock();
-    vcs.lock();
-    if (block->isVisible())
-    {
-        block->tick(0);
-        visibleBlocks.add(block);
-    }
-    vcs.unlock();
-}
-
-void Chunk::removeBlock(Block* zBlock)
+void Chunk::load(Framework::StreamReader* zReader)
 {
     cs.lock();
-    vcs.lock();
-    for (Framework::Iterator<Block*> iterator = visibleBlocks.begin(); iterator;
-         iterator++)
+    for (int i = 0; i < CHUNK_SIZE * CHUNK_SIZE * WORLD_HEIGHT; i++)
     {
-        if (zBlock == (Block*)iterator)
+        if (blocks[i])
         {
-            iterator.remove();
-            break;
+            blocks[i]->release();
+            blocks[i] = 0;
         }
     }
-    vcs.unlock();
-    for (Framework::Iterator<Block*> iterator = blocks.begin(); iterator;
-         iterator++)
-    {
-        if (zBlock == (Block*)iterator)
-        {
-            iterator.remove();
-            break;
-        }
-    }
-    cs.unlock();
-}
-
-void Chunk::load(Framework::StreamReader* zReader)
-{
-    cs.lock();
-    blocks.leeren();
     cs.unlock();
     RCTrie<Block> blockCache;
     isLoading = 1;
@@ -204,15 +111,19 @@ void Chunk::load(Framework::StreamReader* zReader)
                 {pos.x + location.x - CHUNK_SIZE / 2,
                     pos.y + location.y - CHUNK_SIZE / 2,
                     pos.z});
-            blocks.add(b);
+            blocks[index] = b;
             blockCache.set(
                 (char*)&index, 4, dynamic_cast<Block*>(b->getThis()));
             cs.unlock();
             vcs.lock();
             if (b->isVisible())
             {
-                b->tick(0);
-                visibleBlocks.add(b);
+                if (!blockTypes[id]->getModelInfo().getModelName().istGleich(
+                        "cube"))
+                {
+                    b->tick(0);
+                    visibleBlocks.add(b);
+                }
             }
             vcs.unlock();
         }
@@ -337,6 +248,429 @@ void Chunk::load(Framework::StreamReader* zReader)
     isLoading = 0;
 }
 
+void Chunk::buildGroundModel()
+{
+    vcs.lock();
+    lightChanged = 0;
+    Model3DData* chunkModel = groundModel->zModelData();
+    // remove old model
+    while (chunkModel->getPolygonAnzahl() > 0)
+    {
+        chunkModel->removePolygon(0);
+    }
+    // calculate verticies
+    Trie<GroundModelPart*> groundModelBuidler;
+    Array<GroundModelPart*> groundPartArray;
+    Vertex3D* groundVerticies = new Vertex3D[10000];
+    __int64* lightBuffer = new __int64[10000];
+    int groundVertexCount = 0;
+    int groundVertexArraySize = 10000;
+    for (int i = 0; i < CHUNK_SIZE * CHUNK_SIZE * WORLD_HEIGHT; i++)
+    {
+        if (blocks[i]
+            && blocks[i]->zBlockType()->getModelInfo().getModelName().istGleich(
+                "cube"))
+        {
+            int index = 0;
+            for (Text* textureName :
+                *blocks[i]->zBlockType()->getModelInfo().getTexturNames())
+            {
+                Framework::Vec3<int> location((i / WORLD_HEIGHT) / CHUNK_SIZE,
+                    (i / WORLD_HEIGHT) % CHUNK_SIZE,
+                    i % WORLD_HEIGHT);
+                if (isPartOfGroundModel(location, index))
+                {
+                    if (!groundModelBuidler.get(
+                            *textureName, textureName->getLength()))
+                    {
+                        GroundModelPart* part = new GroundModelPart();
+                        part->indexList = new int[10000];
+                        part->indexCount = 0;
+                        part->indexArraySize = 10000;
+                        part->name = *textureName;
+                        groundModelBuidler.set(
+                            *textureName, textureName->getLength(), part);
+                        groundPartArray.add(part);
+                    }
+                    GroundModelPart* part = groundModelBuidler.get(
+                        *textureName, textureName->getLength());
+                    const Vertex3D* vBuffer
+                        = blocks[i]->zModelData()->zVertexBuffer();
+                    Polygon3D* polygon
+                        = blocks[i]->zModelData()->getPolygon(index);
+                    if (part->indexCount + polygon->indexAnz
+                        > part->indexArraySize)
+                    {
+                        int* tmp = new int[part->indexArraySize + 10000];
+                        memcpy(tmp, part->indexList, part->indexCount * 4);
+                        delete[] part->indexList;
+                        part->indexList = tmp;
+                        part->indexArraySize += 10000;
+                    }
+                    if (groundVertexCount + polygon->indexAnz
+                        > groundVertexArraySize)
+                    {
+                        Vertex3D* tmp
+                            = new Vertex3D[groundVertexArraySize + 10000];
+                        memcpy(tmp,
+                            groundVerticies,
+                            groundVertexCount * sizeof(Vertex3D));
+                        delete[] groundVerticies;
+                        groundVerticies = tmp;
+                        groundVertexArraySize += 10000;
+                        __int64* lTmp = new __int64[groundVertexArraySize];
+                        memcpy(lTmp,
+                            lightBuffer,
+                            groundVertexCount * sizeof(__int64));
+                        delete[] lightBuffer;
+                        lightBuffer = lTmp;
+                    }
+                    for (int vi = 0; vi < polygon->indexAnz; vi++)
+                    {
+                        lightBuffer[groundVertexCount] = calculateLight(
+                            vBuffer[polygon->indexList[vi]].pos,
+                            location,
+                            getDirectionFromIndex(index));
+                        part->indexList[part->indexCount++] = groundVertexCount;
+                        groundVerticies[groundVertexCount++]
+                            = vBuffer[polygon->indexList[vi]];
+                        groundVerticies[groundVertexCount - 1].pos
+                            += blocks[i]->getPos()
+                             - Vec3<float>((float)this->location.x,
+                                 (float)this->location.y,
+                                 (float)WORLD_HEIGHT / 2.f);
+                        groundVerticies[groundVertexCount - 1].id
+                            = groundVertexCount - 1;
+                    }
+                }
+                index++;
+            }
+        }
+    }
+    Model3DTextur* textur = new Model3DTextur();
+    int pi = 0;
+    for (GroundModelPart* part : groundPartArray)
+    {
+        Polygon3D* polygon = new Polygon3D();
+        polygon->indexAnz = part->indexCount;
+        polygon->indexList = part->indexList;
+        groundModel->zModelData()->addPolygon(polygon);
+        textur->setPolygonTextur(pi,
+            uiFactory.initParam.bildschirm->zGraphicsApi()->createOrGetTextur(
+                part->name));
+        pi++;
+        delete part;
+    }
+    groundModel->zModelData()->setVertecies(groundVerticies, groundVertexCount);
+    groundModel->setModelTextur(textur);
+    groundModel->setVertexLightBuffer(lightBuffer, groundVertexCount);
+    vcs.unlock();
+}
+
+void Chunk::updateGroundLight()
+{
+    vcs.lock();
+    __int64* lightBuffer = groundModel->zLightBuffer();
+    int groundVertexCount = 0;
+    for (int i = 0; i < CHUNK_SIZE * CHUNK_SIZE * WORLD_HEIGHT; i++)
+    {
+        if (blocks[i]
+            && blocks[i]->zBlockType()->getModelInfo().getModelName().istGleich(
+                "cube"))
+        {
+            int index = 0;
+            for (Text* textureName :
+                *blocks[i]->zBlockType()->getModelInfo().getTexturNames())
+            {
+                Framework::Vec3<int> location((i / WORLD_HEIGHT) / CHUNK_SIZE,
+                    (i / WORLD_HEIGHT) % CHUNK_SIZE,
+                    i % WORLD_HEIGHT);
+                if (isPartOfGroundModel(location, index))
+                {
+                    const Vertex3D* vBuffer
+                        = blocks[i]->zModelData()->zVertexBuffer();
+                    Polygon3D* polygon
+                        = blocks[i]->zModelData()->getPolygon(index);
+                    for (int vi = 0; vi < polygon->indexAnz; vi++)
+                    {
+                        lightBuffer[groundVertexCount++] = calculateLight(
+                            vBuffer[polygon->indexList[vi]].pos,
+                            location,
+                            getDirectionFromIndex(index));
+                    }
+                }
+                index++;
+            }
+        }
+    }
+    groundModel->copyLightToGPU();
+    vcs.unlock();
+}
+
+__int64 Chunk::calculateLight(
+    Vec3<float> vertexPos, Vec3<int> blockPos, Direction direction)
+{
+    __int64 result = 0;
+    int sumCount = 1;
+    short lightSum[6];
+    Block* current = blocks[index(blockPos)];
+    const unsigned char* light = current->getLightData(direction);
+    for (int i = 0; i < 6; i++)
+    {
+        lightSum[i] = (short)light[i];
+    }
+    Vec3<int> vertexDirs(vertexPos.x < 0 ? -1 : 1,
+        vertexPos.y < 0 ? -1 : 1,
+        vertexPos.z < 0 ? -1 : 1);
+    Directions dirs = getDirectionsFromVector(vertexDirs) & ~direction;
+    Vec3<int> neighborDirs[3];
+    int neighborIndex = 0;
+    for (int i = 0; i < 6; i++)
+    {
+        Direction dir = getDirectionFromIndex(i);
+        if ((dirs | dir) == dirs)
+        {
+            neighborDirs[neighborIndex++] = getDirection(dir);
+            if (neighborIndex == 2) break;
+        }
+    }
+    neighborDirs[2] = neighborDirs[0] + neighborDirs[1];
+    for (int i = 0; i < 3; i++)
+    {
+        neighborDirs[i] += blockPos;
+        if (neighborDirs[i].x >= 0 && neighborDirs[i].y >= 0
+            && neighborDirs[i].z >= 0 && neighborDirs[i].x < CHUNK_SIZE
+            && neighborDirs[i].y < CHUNK_SIZE
+            && neighborDirs[i].z < WORLD_HEIGHT)
+        {
+            int neighborIndex = index(neighborDirs[i]);
+            Block* neighbor = blocks[neighborIndex];
+            if (neighbor)
+            {
+                const unsigned char* neighborLight
+                    = neighbor->getLightData(direction);
+                if ((neighborLight[0] | neighborLight[1] | neighborLight[2]
+                        | neighborLight[3] | neighborLight[4]
+                        | neighborLight[5])
+                    != 0)
+                {
+                    sumCount++;
+                    for (int j = 0; j < 6; j++)
+                    {
+                        lightSum[j] += (short)neighborLight[j];
+                    }
+                }
+            }
+        }
+        else
+        { // TODO: get light from neighbor chunk
+        }
+    }
+    for (int i = 0; i < 6; i++)
+    {
+        lightSum[i] = (lightSum[i] / sumCount) & 0xFF;
+    }
+    result = ((__int64)lightSum[0] << 24) | ((__int64)lightSum[1] << 16)
+           | ((__int64)lightSum[2] << 8) | ((__int64)lightSum[3] << 56)
+           | ((__int64)lightSum[4] << 48) | ((__int64)lightSum[5] << 40);
+    return result;
+}
+
+bool Chunk::isPartOfGroundModel(
+    Framework::Vec3<int> location, int directionIndex)
+{
+    Framework::Vec3<int> neighborLocation
+        = location + getDirection(getDirectionFromIndex(directionIndex));
+    bool needed = 0;
+    if (neighborLocation.x < 0 || neighborLocation.y < 0
+        || neighborLocation.z < 0 || neighborLocation.x >= CHUNK_SIZE
+        || neighborLocation.y >= CHUNK_SIZE
+        || neighborLocation.z >= WORLD_HEIGHT)
+    {
+        needed = 1;
+    }
+    else
+    {
+        int naighborIndex = index(neighborLocation);
+        if (!blocks[naighborIndex]
+            || !blocks[naighborIndex]
+                    ->zBlockType()
+                    ->getModelInfo()
+                    .getModelName()
+                    .istGleich("cube"))
+        {
+            needed = 1;
+        }
+    }
+    return needed;
+}
+
+void Chunk::destroy()
+{
+    Model3DData* chunkModel = groundModel->zModelData();
+    // remove old model
+    while (chunkModel->getPolygonAnzahl() > 0)
+    {
+        chunkModel->removePolygon(0);
+    }
+    chunkModel->setVertecies(0, 0);
+}
+
+void Chunk::api(char* message)
+{
+    switch (message[0])
+    {
+    case 0: // set block
+        {
+            int index = *(int*)(message + 1);
+            int id = *(int*)(message + 5);
+            Framework::Vec3<int> location((index / WORLD_HEIGHT) / CHUNK_SIZE,
+                (index / WORLD_HEIGHT) % CHUNK_SIZE,
+                index % WORLD_HEIGHT);
+            location.x += this->location.x - CHUNK_SIZE / 2;
+            location.y += this->location.y - CHUNK_SIZE / 2;
+            if (blockTypes[id]->doesNeedInstance())
+            {
+                Block* zB = blockTypes[id]->createBlock(location);
+                setBlock(zB);
+            }
+            else
+            {
+                Block* zB = zBlockAt(location);
+                if (zB) removeBlock(zB);
+            }
+            break;
+        }
+    case 1: // animate block
+        {
+            int index = *(int*)(message + 1);
+            int boneId = *(int*)(message + 5);
+            double time = *(double*)(message + 9);
+            Framework::Vec3<float> pos;
+            pos.x = *(float*)(message + 17);
+            pos.y = *(float*)(message + 21);
+            pos.z = *(float*)(message + 25);
+            Framework::Vec3<float> rot;
+            rot.x = *(float*)(message + 29);
+            rot.y = *(float*)(message + 33);
+            rot.z = *(float*)(message + 37);
+            Framework::Vec3<int> location((index / WORLD_HEIGHT) / CHUNK_SIZE,
+                (index / WORLD_HEIGHT) % CHUNK_SIZE,
+                index % WORLD_HEIGHT);
+            location.x += this->location.x - CHUNK_SIZE / 2;
+            location.y += this->location.y - CHUNK_SIZE / 2;
+            Block* zB = zBlockAt(location);
+            if (zB) appendAnimation(zB, boneId, time, pos, rot);
+            break;
+        }
+    }
+}
+
+Block* Chunk::zBlockAt(Framework::Vec3<int> location)
+{
+    location.x = location.x % CHUNK_SIZE;
+    location.y = location.y % CHUNK_SIZE;
+    if (location.x < 0) location.x += CHUNK_SIZE;
+    if (location.y < 0) location.y += CHUNK_SIZE;
+    int index
+        = (location.x * CHUNK_SIZE + location.y) * WORLD_HEIGHT + location.z;
+    return blocks[index];
+}
+
+void Chunk::setBlock(Block* block)
+{
+    cs.lock();
+    Framework::Vec3<int> pos = block->getLocation();
+    pos.x = pos.x % CHUNK_SIZE;
+    pos.y = pos.y % CHUNK_SIZE;
+    if (pos.x < 0) pos.x += CHUNK_SIZE;
+    if (pos.y < 0) pos.y += CHUNK_SIZE;
+    int index = (pos.x * CHUNK_SIZE + pos.y) * WORLD_HEIGHT + pos.z;
+    bool newAffectsGround
+        = block
+       && block->zBlockType()->getModelInfo().getModelName().istGleich("cube");
+    bool affectsGround
+        = blocks[index]
+       && blocks[index]->zBlockType()->getModelInfo().getModelName().istGleich(
+           "cube");
+    if (blocks[index])
+    {
+        vcs.lock();
+        for (Framework::Iterator<Block*> vi = visibleBlocks.begin(); vi; vi++)
+        {
+            if (blocks[index] == (Block*)vi)
+            {
+                vi.remove();
+                break;
+            }
+        }
+        vcs.unlock();
+        blocks[index]->copyLightTo(block);
+        blocks[index]->release();
+        blocks[index] = block;
+        cs.unlock();
+        vcs.lock();
+        if (affectsGround || newAffectsGround)
+        {
+            buildGroundModel();
+        }
+        if (block && block->isVisible() && !newAffectsGround)
+        {
+            block->tick(0);
+            visibleBlocks.add(block);
+        }
+        vcs.unlock();
+        return;
+    }
+    blocks[index] = block;
+    cs.unlock();
+    vcs.lock();
+    if (affectsGround || newAffectsGround)
+    {
+        buildGroundModel();
+    }
+    if (block && block->isVisible() && !newAffectsGround)
+    {
+        block->tick(0);
+        visibleBlocks.add(block);
+    }
+    vcs.unlock();
+}
+
+void Chunk::removeBlock(Block* zBlock)
+{
+    cs.lock();
+    vcs.lock();
+    for (Framework::Iterator<Block*> iterator = visibleBlocks.begin(); iterator;
+         iterator++)
+    {
+        if (zBlock == (Block*)iterator)
+        {
+            iterator.remove();
+            break;
+        }
+    }
+    vcs.unlock();
+    Vec3<int> pos = zBlock->getLocation();
+    pos.x = pos.x % CHUNK_SIZE;
+    pos.y = pos.y % CHUNK_SIZE;
+    if (pos.x < 0) pos.x += CHUNK_SIZE;
+    if (pos.y < 0) pos.y += CHUNK_SIZE;
+    int index = (pos.x * CHUNK_SIZE + pos.y) * WORLD_HEIGHT + pos.z;
+    if (blocks[index])
+    {
+        bool affectsGround = blocks[index]
+                                 ->zBlockType()
+                                 ->getModelInfo()
+                                 .getModelName()
+                                 .istGleich("cube");
+        blocks[index]->release();
+        blocks[index] = 0;
+        if (affectsGround) buildGroundModel();
+    }
+    cs.unlock();
+}
+
 void Chunk::blockVisibilityChanged(Block* zB)
 {
     vcs.lock();
@@ -380,6 +714,7 @@ Framework::Vec3<int> Chunk::getMax() const
 void Chunk::forAll(std::function<void(Model3D*)> f)
 {
     vcs.lock();
+    f(groundModel);
     for (Block* b : visibleBlocks)
         f(b);
     vcs.unlock();
@@ -387,8 +722,14 @@ void Chunk::forAll(std::function<void(Model3D*)> f)
 
 bool Chunk::tick(std::function<void(Model3D*)> f, double time)
 {
-    bool res = 0;
     acs.lock();
+    vcs.lock(); // TODO: enshure no dead lock occures
+    if (lightChanged)
+    {
+        lightChanged = 0;
+        updateGroundLight();
+    }
+    bool res = groundModel->tick(time);
     auto iterator = animations.begin();
     while (iterator)
     {
@@ -408,6 +749,12 @@ bool Chunk::tick(std::function<void(Model3D*)> f, double time)
         }
         ++iterator;
     }
+    vcs.unlock();
     acs.unlock();
     return res;
+}
+
+void Chunk::setLightChanged()
+{
+    lightChanged = 1;
 }

+ 29 - 3
FactoryCraft/Chunk.h

@@ -10,35 +10,61 @@
 #include "Area.h"
 #include "Block.h"
 #include "BlockAnimation.h"
+#include "Constants.h"
+#include "FactoryCraftModel.h"
+
+struct GroundModelPart
+{
+    int* indexList;
+    int indexCount;
+    int indexArraySize;
+    Text name;
+};
 
 class Chunk : public Framework::Model3DCollection
 {
 private:
     Framework::Punkt location;
     // TODO: use native array for bedder performance?
-    Framework::RCArray<Block> blocks;
+    Block** blocks;
     Framework::Array<Block*> visibleBlocks;
+    FactoryCraftModel* groundModel;
     bool isLoading;
     Framework::Critical cs;
     Framework::Critical vcs;
     Framework::Critical acs;
     Framework::RCArray<BlockAnimation> animations;
+    bool lightChanged;
 
-    void appendAnimation(Block* zB, int boneId, double time, Vec3<float> pos, Vec3<float> rot);
+    void appendAnimation(
+        Block* zB, int boneId, double time, Vec3<float> pos, Vec3<float> rot);
+    void load(Framework::StreamReader* zReader);
+    void buildGroundModel();
+    void updateGroundLight();
+    __int64 calculateLight(
+        Vec3<float> vertexPos, Vec3<int> blockPos, Direction direction);
+    bool isPartOfGroundModel(Framework::Vec3<int> location, int directionIndex);
 
 public:
     Chunk(Framework::Punkt location);
     Chunk(Framework::Punkt location, Framework::StreamReader* zReader);
     ~Chunk();
+    void destroy();
     void api(char* message);
     Block* zBlockAt(Framework::Vec3<int> cLocation);
     void setBlock(Block* block);
     void removeBlock(Block* zBlock);
-    void load(Framework::StreamReader* zReader);
     void blockVisibilityChanged(Block* zB);
     Framework::Punkt getCenter() const;
     Framework::Vec3<int> getMin() const;
     Framework::Vec3<int> getMax() const;
     void forAll(std::function<void(Model3D*)> f) override;
     bool tick(std::function<void(Model3D*)> f, double time) override;
+    void setLightChanged();
+
+    inline static int index(Framework::Vec3<int> localLocation)
+    {
+        return (localLocation.x * CHUNK_SIZE + localLocation.y) * WORLD_HEIGHT
+             + localLocation.z;
+    }
 };

+ 2 - 2
FactoryCraft/Constants.h

@@ -3,8 +3,8 @@
 #define CHUNK_SIZE             16
 #define WORLD_HEIGHT           500
 #ifdef _DEBUG
-#    define CHUNK_VISIBILITY_RANGE 1
+#    define CHUNK_VISIBILITY_RANGE 2
 #else
-#    define CHUNK_VISIBILITY_RANGE 4
+#    define CHUNK_VISIBILITY_RANGE 6
 #endif
 #define MAX_VIEW_DISTANCE      CHUNK_SIZE* CHUNK_VISIBILITY_RANGE

+ 18 - 4
FactoryCraft/CustomDX11API.cpp

@@ -1,6 +1,8 @@
 #include "CustomDX11API.h"
 
 #include <Shader.h>
+#include <DXBuffer.h>
+#include <d3d11.h>
 
 #include "CustomUIDX11PixelShader.h"
 #include "CustomUIDX11VertexShader.h"
@@ -19,10 +21,11 @@ Framework::DX11VertexShader* CustomDX11API::initializeVertexShader(
         (unsigned char*)CustomUIDX11VertexShader,
         sizeof(CustomUIDX11VertexShader));
     vertexShaderLightBufferIndex = shader->getFirstUninitializedBufferIndex();
-    shader->erstelleConstBuffer(4, vertexShaderLightBufferIndex);
-    shader->erstelleConstBuffer(4 * 24, vertexShaderLightBufferIndex + 1);
-    int count = 0;
-    shader->füllConstBuffer((char*)&count, vertexShaderLightBufferIndex, 4);
+    shader->erstelleConstBuffer(20, vertexShaderLightBufferIndex);
+    char buffer[8];
+    *(int*)buffer = 0;
+    *(float*)(buffer + 4) = 1.f;
+    shader->füllConstBuffer(buffer, vertexShaderLightBufferIndex, 8);
     return shader;
 }
 
@@ -35,6 +38,17 @@ Framework::DX11PixelShader* CustomDX11API::initializePixelShader(
     return shader;
 }
 
+void CustomDX11API::setVertexLightBuffer(Framework::DXBuffer* zBuffer)
+{
+    DX11StructuredBuffer* buffer = dynamic_cast<DX11StructuredBuffer*>(zBuffer);
+    if (buffer)
+    {
+        ID3D11ShaderResourceView* v[1];
+        v[0] = *buffer;
+        zContext()->VSSetShaderResources(0, 1, v);
+    }
+}
+
 int CustomDX11API::getVertexShaderLightBufferIndex() const
 {
     return vertexShaderLightBufferIndex;

+ 3 - 0
FactoryCraft/CustomDX11API.h

@@ -1,6 +1,7 @@
 #pragma once
 
 #include <GraphicsApi.h>
+#
 
 class CustomDX11API : public Framework::DirectX11
 {
@@ -16,5 +17,7 @@ protected:
 public:
     CustomDX11API();
 
+    void setVertexLightBuffer(Framework::DXBuffer* zBuffer);
+
     int getVertexShaderLightBufferIndex() const;
 };

+ 242 - 198
FactoryCraft/CustomUIDX11PixelShader.h

@@ -90,27 +90,34 @@ dcl_input_ps linear v4.xyzw
 dcl_output o0.xyzw
 dcl_temps 4
 sample_indexable(texture2d)(float,float,float,float) r0.xyzw, v2.xyxx, t0.xyzw, s0
-add r1.x, r0.w, l(-0.250000)
-lt r1.x, r1.x, l(0.000000)
-discard_nz r1.x
 if_nz cb3[0].x
-  add r1.xy, v2.xyxx, l(-0.500000, -0.500000, 0.000000, 0.000000)
-  mul r1.xy, r1.xyxx, r1.xyxx
-  add r1.x, r1.y, r1.x
-  sqrt r1.x, r1.x
-  mul r1.y, r1.x, l(1.414214)
-  lt r1.y, r1.y, cb3[0].y
-  if_nz r1.y
-    mad r1.x, -r1.x, l(1.414214), cb3[0].y
-    mul r1.y, r1.x, l(5.000000)
-    lt r1.x, l(0.200000), r1.x
-    movc r1.x, r1.x, l(1.000000), r1.y
+  lt r1.x, l(1.000000), cb3[0].y
+  add r1.y, cb3[0].y, l(-1.000000)
+  movc r1.y, r1.x, r1.y, cb3[0].y
+  not r1.z, r1.x
+  add r1.w, r0.w, l(-0.250000)
+  lt r1.w, r1.w, l(0.000000)
+  and r1.z, r1.z, r1.w
+  discard_nz r1.z
+  add r1.zw, v2.xxxy, l(0.000000, 0.000000, -0.500000, -0.500000)
+  mul r1.zw, r1.zzzw, r1.zzzw
+  add r1.z, r1.w, r1.z
+  sqrt r1.z, r1.z
+  mul r1.w, r1.z, l(1.414214)
+  lt r1.w, r1.w, r1.y
+  if_nz r1.w
+    mad r1.y, -r1.z, l(1.414214), r1.y
+    mul r1.z, r1.y, l(5.000000)
+    lt r1.y, l(0.200000), r1.y
+    movc r1.y, r1.y, l(1.000000), r1.z
     sample_indexable(texture2d)(float,float,float,float) r2.xyzw, v2.xyxx, t3.xyzw, s0
-    mul r1.y, r1.x, r2.w
-    mad r1.x, -r2.w, r1.x, l(1.000000)
-    mul r3.xyzw, r0.xyzw, r1.xxxx
-    mad r0.xyzw, r2.xyzw, r1.yyyy, r3.xyzw
-    mov o0.w, r0.w
+    mul r1.z, r1.y, r2.w
+    mad r1.y, -r2.w, r1.y, l(1.000000)
+    mul r3.xyzw, r0.xyzw, r1.yyyy
+    mad r0.xyzw, r2.xyzw, r1.zzzz, r3.xyzw
+    lt r1.y, l(1.000000), r1.z
+    movc r1.y, r1.y, l(1.000000), r1.z
+    movc o0.w, r1.x, r1.y, r0.w
   else 
     mov o0.w, r0.w
   endif 
@@ -147,20 +154,20 @@ mad_sat r1.yzw, r0.xxyz, cb1[0].xxxx, r1.xxyz
 ne r0.w, r1.x, r1.x
 movc o0.xyz, r0.wwww, r0.xyzx, r1.yzwy
 ret 
-// Approximately 58 instruction slots used
+// Approximately 65 instruction slots used
 #endif
 
 const BYTE CustomUIDX11PixelShader[] =
 {
-     68,  88,  66,  67, 122, 190, 
-    178,  76, 180,  13,  87,  36, 
-    237, 149, 228, 226, 137,  42, 
-    193,   9,   1,   0,   0,   0, 
-    160,  12,   0,   0,   5,   0, 
+     68,  88,  66,  67, 190, 148, 
+     52,  46,  19,  14, 157, 230, 
+    178,  24, 218, 183, 220, 114, 
+    127, 192,   1,   0,   0,   0, 
+    128,  13,   0,   0,   5,   0, 
       0,   0,  52,   0,   0,   0, 
     248,   4,   0,   0, 160,   5, 
       0,   0, 212,   5,   0,   0, 
-      4,  12,   0,   0,  82,  68, 
+    228,  12,   0,   0,  82,  68, 
      69,  70, 188,   4,   0,   0, 
       4,   0,   0,   0, 120,   1, 
       0,   0,   7,   0,   0,   0, 
@@ -401,8 +408,8 @@ const BYTE CustomUIDX11PixelShader[] =
      15,   0,   0,   0,  83,  86, 
      95,  84,  65,  82,  71,  69, 
      84,   0, 171, 171,  83,  72, 
-     69,  88,  40,   6,   0,   0, 
-     80,   0,   0,   0, 138,   1, 
+     69,  88,   8,   7,   0,   0, 
+     80,   0,   0,   0, 194,   1, 
       0,   0, 106,   8,   0,   1, 
      89,   0,   0,   4,  70, 142, 
      32,   0,   1,   0,   0,   0, 
@@ -438,74 +445,98 @@ const BYTE CustomUIDX11PixelShader[] =
      16,   0,   2,   0,   0,   0, 
      70, 126,  16,   0,   0,   0, 
       0,   0,   0,  96,  16,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   7,  18,   0,  16,   0, 
-      1,   0,   0,   0,  58,   0, 
-     16,   0,   0,   0,   0,   0, 
-      1,  64,   0,   0,   0,   0, 
-    128, 190,  49,   0,   0,   7, 
+      0,   0,   0,   0,  31,   0, 
+      4,   4,  10, 128,  32,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  49,   0,   0,   8, 
      18,   0,  16,   0,   1,   0, 
-      0,   0,  10,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,   0,   0,   0,   0, 
-     13,   0,   4,   3,  10,   0, 
-     16,   0,   1,   0,   0,   0, 
-     31,   0,   4,   4,  10, 128, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0, 128,  63,  26, 128, 
      32,   0,   3,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,  10,  50,   0,  16,   0, 
-      1,   0,   0,   0,  70,  16, 
-     16,   0,   2,   0,   0,   0, 
-      2,  64,   0,   0,   0,   0, 
-      0, 191,   0,   0,   0, 191, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,  56,   0,   0,   7, 
-     50,   0,  16,   0,   1,   0, 
-      0,   0,  70,   0,  16,   0, 
-      1,   0,   0,   0,  70,   0, 
-     16,   0,   1,   0,   0,   0, 
-      0,   0,   0,   7,  18,   0, 
+      0,   8,  34,   0,  16,   0, 
+      1,   0,   0,   0,  26, 128, 
+     32,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,   1,  64, 
+      0,   0,   0,   0, 128, 191, 
+     55,   0,   0,  10,  34,   0, 
      16,   0,   1,   0,   0,   0, 
-     26,   0,  16,   0,   1,   0, 
-      0,   0,  10,   0,  16,   0, 
-      1,   0,   0,   0,  75,   0, 
-      0,   5,  18,   0,  16,   0, 
+     10,   0,  16,   0,   1,   0, 
+      0,   0,  26,   0,  16,   0, 
+      1,   0,   0,   0,  26, 128, 
+     32,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,  59,   0, 
+      0,   5,  66,   0,  16,   0, 
       1,   0,   0,   0,  10,   0, 
      16,   0,   1,   0,   0,   0, 
-     56,   0,   0,   7,  34,   0, 
+      0,   0,   0,   7, 130,   0, 
      16,   0,   1,   0,   0,   0, 
-     10,   0,  16,   0,   1,   0, 
+     58,   0,  16,   0,   0,   0, 
       0,   0,   1,  64,   0,   0, 
-    243,   4, 181,  63,  49,   0, 
-      0,   8,  34,   0,  16,   0, 
-      1,   0,   0,   0,  26,   0, 
+      0,   0, 128, 190,  49,   0, 
+      0,   7, 130,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   7, 
+     66,   0,  16,   0,   1,   0, 
+      0,   0,  42,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+     13,   0,   4,   3,  42,   0, 
+     16,   0,   1,   0,   0,   0, 
+      0,   0,   0,  10, 194,   0, 
      16,   0,   1,   0,   0,   0, 
-     26, 128,  32,   0,   3,   0, 
+      6,  20,  16,   0,   2,   0, 
+      0,   0,   2,  64,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     31,   0,   4,   3,  26,   0, 
+      0,   0,   0,   0,   0, 191, 
+      0,   0,   0, 191,  56,   0, 
+      0,   7, 194,   0,  16,   0, 
+      1,   0,   0,   0, 166,  14, 
      16,   0,   1,   0,   0,   0, 
-     50,   0,   0,  11,  18,   0, 
+    166,  14,  16,   0,   1,   0, 
+      0,   0,   0,   0,   0,   7, 
+     66,   0,  16,   0,   1,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,  42,   0, 
      16,   0,   1,   0,   0,   0, 
-     10,   0,  16, 128,  65,   0, 
-      0,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0, 243,   4, 
-    181,  63,  26, 128,  32,   0, 
-      3,   0,   0,   0,   0,   0, 
+     75,   0,   0,   5,  66,   0, 
+     16,   0,   1,   0,   0,   0, 
+     42,   0,  16,   0,   1,   0, 
+      0,   0,  56,   0,   0,   7, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,  42,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0, 243,   4, 181,  63, 
+     49,   0,   0,   7, 130,   0, 
+     16,   0,   1,   0,   0,   0, 
+     58,   0,  16,   0,   1,   0, 
+      0,   0,  26,   0,  16,   0, 
+      1,   0,   0,   0,  31,   0, 
+      4,   3,  58,   0,  16,   0, 
+      1,   0,   0,   0,  50,   0, 
+      0,  10,  34,   0,  16,   0, 
+      1,   0,   0,   0,  42,   0, 
+     16, 128,  65,   0,   0,   0, 
+      1,   0,   0,   0,   1,  64, 
+      0,   0, 243,   4, 181,  63, 
+     26,   0,  16,   0,   1,   0, 
       0,   0,  56,   0,   0,   7, 
-     34,   0,  16,   0,   1,   0, 
-      0,   0,  10,   0,  16,   0, 
+     66,   0,  16,   0,   1,   0, 
+      0,   0,  26,   0,  16,   0, 
       1,   0,   0,   0,   1,  64, 
       0,   0,   0,   0, 160,  64, 
-     49,   0,   0,   7,  18,   0, 
+     49,   0,   0,   7,  34,   0, 
      16,   0,   1,   0,   0,   0, 
       1,  64,   0,   0, 205, 204, 
-     76,  62,  10,   0,  16,   0, 
+     76,  62,  26,   0,  16,   0, 
       1,   0,   0,   0,  55,   0, 
-      0,   9,  18,   0,  16,   0, 
-      1,   0,   0,   0,  10,   0, 
+      0,   9,  34,   0,  16,   0, 
+      1,   0,   0,   0,  26,   0, 
      16,   0,   1,   0,   0,   0, 
       1,  64,   0,   0,   0,   0, 
-    128,  63,  26,   0,  16,   0, 
+    128,  63,  42,   0,  16,   0, 
       1,   0,   0,   0,  69,   0, 
       0, 139, 194,   0,   0, 128, 
      67,  85,  21,   0, 242,   0, 
@@ -514,172 +545,185 @@ const BYTE CustomUIDX11PixelShader[] =
       0,   0,  70, 126,  16,   0, 
       3,   0,   0,   0,   0,  96, 
      16,   0,   0,   0,   0,   0, 
-     56,   0,   0,   7,  34,   0, 
+     56,   0,   0,   7,  66,   0, 
      16,   0,   1,   0,   0,   0, 
-     10,   0,  16,   0,   1,   0, 
+     26,   0,  16,   0,   1,   0, 
       0,   0,  58,   0,  16,   0, 
       2,   0,   0,   0,  50,   0, 
-      0,  10,  18,   0,  16,   0, 
+      0,  10,  34,   0,  16,   0, 
       1,   0,   0,   0,  58,   0, 
      16, 128,  65,   0,   0,   0, 
-      2,   0,   0,   0,  10,   0, 
+      2,   0,   0,   0,  26,   0, 
      16,   0,   1,   0,   0,   0, 
       1,  64,   0,   0,   0,   0, 
     128,  63,  56,   0,   0,   7, 
     242,   0,  16,   0,   3,   0, 
       0,   0,  70,  14,  16,   0, 
-      0,   0,   0,   0,   6,   0, 
+      0,   0,   0,   0,  86,   5, 
      16,   0,   1,   0,   0,   0, 
      50,   0,   0,   9, 242,   0, 
      16,   0,   0,   0,   0,   0, 
      70,  14,  16,   0,   2,   0, 
-      0,   0,  86,   5,  16,   0, 
+      0,   0, 166,  10,  16,   0, 
       1,   0,   0,   0,  70,  14, 
      16,   0,   3,   0,   0,   0, 
-     54,   0,   0,   5, 130,  32, 
-     16,   0,   0,   0,   0,   0, 
-     58,   0,  16,   0,   0,   0, 
-      0,   0,  18,   0,   0,   1, 
+     49,   0,   0,   7,  34,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+    128,  63,  42,   0,  16,   0, 
+      1,   0,   0,   0,  55,   0, 
+      0,   9,  34,   0,  16,   0, 
+      1,   0,   0,   0,  26,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+    128,  63,  42,   0,  16,   0, 
+      1,   0,   0,   0,  55,   0, 
+      0,   9, 130,  32,  16,   0, 
+      0,   0,   0,   0,  10,   0, 
+     16,   0,   1,   0,   0,   0, 
+     26,   0,  16,   0,   1,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,  18,   0, 
+      0,   1,  54,   0,   0,   5, 
+    130,  32,  16,   0,   0,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,  21,   0, 
+      0,   1,  18,   0,   0,   1, 
      54,   0,   0,   5, 130,  32, 
      16,   0,   0,   0,   0,   0, 
      58,   0,  16,   0,   0,   0, 
       0,   0,  21,   0,   0,   1, 
-     18,   0,   0,   1,  54,   0, 
-      0,   5, 130,  32,  16,   0, 
-      0,   0,   0,   0,  58,   0, 
+     49,   0,   0,   7, 130,   0, 
      16,   0,   0,   0,   0,   0, 
-     21,   0,   0,   1,  49,   0, 
-      0,   7, 130,   0,  16,   0, 
-      0,   0,   0,   0,   1,  64, 
-      0,   0,   0,   0,   0,   0, 
-     58,  16,  16,   0,   4,   0, 
-      0,   0,  31,   0,   4,   3, 
-     58,   0,  16,   0,   0,   0, 
-      0,   0,  56,   0,   0,   7, 
-    114,   0,  16,   0,   1,   0, 
-      0,   0,  70,   2,  16,   0, 
-      0,   0,   0,   0,  70,  18, 
-     16,   0,   4,   0,   0,   0, 
-     18,   0,   0,   1,  54,   0, 
-      0,   8, 114,   0,  16,   0, 
-      1,   0,   0,   0,   2,  64, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0,  58,  16,  16,   0, 
+      4,   0,   0,   0,  31,   0, 
+      4,   3,  58,   0,  16,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   7, 114,   0,  16,   0, 
+      1,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+     70,  18,  16,   0,   4,   0, 
+      0,   0,  18,   0,   0,   1, 
+     54,   0,   0,   8, 114,   0, 
+     16,   0,   1,   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,   0,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0,   0,   0,  48,   0, 
+      0,   1,  33,   0,   0,   8, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,  10, 128, 
+     32,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      4,   3,  58,   0,  16,   0, 
+      1,   0,   0,   0, 167,   0, 
+      0, 139,   2, 195,   0, 128, 
+    131, 153,  25,   0, 114,   0, 
+     16,   0,   2,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0,   0,   0,  70, 114, 
+     16,   0,   1,   0,   0,   0, 
+     16,   0,   0,   8, 130,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70,  18,  16,   0,   3,   0, 
+      0,   0,  70,   2,  16, 128, 
+     65,   0,   0,   0,   2,   0, 
+      0,   0,  49,   0,   0,   7, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,  58,   0,  16,   0, 
+      1,   0,   0,   0,   1,  64, 
       0,   0,   0,   0,   0,   0, 
-     54,   0,   0,   5, 130,   0, 
-     16,   0,   0,   0,   0,   0, 
-      1,  64,   0,   0,   0,   0, 
-      0,   0,  48,   0,   0,   1, 
-     33,   0,   0,   8, 130,   0, 
+     31,   0,   4,   3,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+     30,   0,   0,   7, 130,   0, 
      16,   0,   1,   0,   0,   0, 
      58,   0,  16,   0,   0,   0, 
-      0,   0,  10, 128,  32,   0, 
-      2,   0,   0,   0,   0,   0, 
-      0,   0,   3,   0,   4,   3, 
-     58,   0,  16,   0,   1,   0, 
-      0,   0, 167,   0,   0, 139, 
+      0,   0,   1,  64,   0,   0, 
+      1,   0,   0,   0,  54,   0, 
+      0,   5, 130,   0,  16,   0, 
+      0,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
+      7,   0,   0,   1,  21,   0, 
+      0,   1, 167,   0,   0, 139, 
       2, 195,   0, 128, 131, 153, 
-     25,   0, 114,   0,  16,   0, 
+     25,   0,  50,   0,  16,   0, 
       2,   0,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
       1,  64,   0,   0,   0,   0, 
-      0,   0,  70, 114,  16,   0, 
-      1,   0,   0,   0,  16,   0, 
-      0,   8, 130,   0,  16,   0, 
-      1,   0,   0,   0,  70,  18, 
+      0,   0,  70, 112,  16,   0, 
+      1,   0,   0,   0, 167,   0, 
+      0, 139,   2, 195,   0, 128, 
+    131, 153,  25,   0, 242,   0, 
      16,   0,   3,   0,   0,   0, 
-     70,   2,  16, 128,  65,   0, 
-      0,   0,   2,   0,   0,   0, 
-     49,   0,   0,   7, 130,   0, 
-     16,   0,   1,   0,   0,   0, 
-     58,   0,  16,   0,   1,   0, 
+     58,   0,  16,   0,   0,   0, 
       0,   0,   1,  64,   0,   0, 
-      0,   0,   0,   0,  31,   0, 
-      4,   3,  58,   0,  16,   0, 
+      8,   0,   0,   0,  70, 126, 
+     16,   0,   1,   0,   0,   0, 
+     54,   0,   0,   5,  66,   0, 
+     16,   0,   2,   0,   0,   0, 
+     10,   0,  16,   0,   3,   0, 
+      0,   0,  16,   0,   0,   8, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,  70,  18,  16,   0, 
+      3,   0,   0,   0,  70,   2, 
+     16, 128,  65,   0,   0,   0, 
+      2,   0,   0,   0,  50,   0, 
+      0,   9, 114,   0,  16,   0, 
+      1,   0,   0,   0, 150,   7, 
+     16,   0,   3,   0,   0,   0, 
+    246,  15,  16,   0,   1,   0, 
+      0,   0,  70,   2,  16,   0, 
       1,   0,   0,   0,  30,   0, 
       0,   7, 130,   0,  16,   0, 
-      1,   0,   0,   0,  58,   0, 
+      0,   0,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
       1,  64,   0,   0,   1,   0, 
-      0,   0,  54,   0,   0,   5, 
-    130,   0,  16,   0,   0,   0, 
-      0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,   7,   0, 
-      0,   1,  21,   0,   0,   1, 
-    167,   0,   0, 139,   2, 195, 
-      0, 128, 131, 153,  25,   0, 
-     50,   0,  16,   0,   2,   0, 
-      0,   0,  58,   0,  16,   0, 
-      0,   0,   0,   0,   1,  64, 
-      0,   0,   0,   0,   0,   0, 
-     70, 112,  16,   0,   1,   0, 
-      0,   0, 167,   0,   0, 139, 
-      2, 195,   0, 128, 131, 153, 
-     25,   0, 242,   0,  16,   0, 
-      3,   0,   0,   0,  58,   0, 
-     16,   0,   0,   0,   0,   0, 
-      1,  64,   0,   0,   8,   0, 
-      0,   0,  70, 126,  16,   0, 
-      1,   0,   0,   0,  54,   0, 
-      0,   5,  66,   0,  16,   0, 
-      2,   0,   0,   0,  10,   0, 
-     16,   0,   3,   0,   0,   0, 
-     16,   0,   0,   8, 130,   0, 
-     16,   0,   1,   0,   0,   0, 
-     70,  18,  16,   0,   3,   0, 
-      0,   0,  70,   2,  16, 128, 
-     65,   0,   0,   0,   2,   0, 
-      0,   0,  50,   0,   0,   9, 
-    114,   0,  16,   0,   1,   0, 
-      0,   0, 150,   7,  16,   0, 
-      3,   0,   0,   0, 246,  15, 
+      0,   0,  22,   0,   0,   1, 
+     21,   0,   0,   1,  56,   0, 
+      0,   8, 114,   0,  16,   0, 
+      1,   0,   0,   0,  70,   2, 
      16,   0,   1,   0,   0,   0, 
-     70,   2,  16,   0,   1,   0, 
-      0,   0,  30,   0,   0,   7, 
-    130,   0,  16,   0,   0,   0, 
-      0,   0,  58,   0,  16,   0, 
-      0,   0,   0,   0,   1,  64, 
-      0,   0,   1,   0,   0,   0, 
-     22,   0,   0,   1,  21,   0, 
-      0,   1,  56,   0,   0,   8, 
-    114,   0,  16,   0,   1,   0, 
-      0,   0,  70,   2,  16,   0, 
-      1,   0,   0,   0,  86, 133, 
-     32,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0,  50,  32, 
-      0,  10, 226,   0,  16,   0, 
-      1,   0,   0,   0,   6,   9, 
-     16,   0,   0,   0,   0,   0, 
-      6, 128,  32,   0,   1,   0, 
+     86, 133,  32,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
-      6,   9,  16,   0,   1,   0, 
-      0,   0,  57,   0,   0,   7, 
-    130,   0,  16,   0,   0,   0, 
-      0,   0,  10,   0,  16,   0, 
-      1,   0,   0,   0,  10,   0, 
+     50,  32,   0,  10, 226,   0, 
      16,   0,   1,   0,   0,   0, 
-     55,   0,   0,   9, 114,  32, 
-     16,   0,   0,   0,   0,   0, 
-    246,  15,  16,   0,   0,   0, 
-      0,   0,  70,   2,  16,   0, 
-      0,   0,   0,   0, 150,   7, 
+      6,   9,  16,   0,   0,   0, 
+      0,   0,   6, 128,  32,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   6,   9,  16,   0, 
+      1,   0,   0,   0,  57,   0, 
+      0,   7, 130,   0,  16,   0, 
+      0,   0,   0,   0,  10,   0, 
      16,   0,   1,   0,   0,   0, 
-     62,   0,   0,   1,  83,  84, 
-     65,  84, 148,   0,   0,   0, 
-     58,   0,   0,   0,   4,   0, 
-      0,   0,   0,   0,   0,   0, 
-      4,   0,   0,   0,  24,   0, 
-      0,   0,   3,   0,   0,   0, 
-      0,   0,   0,   0,   6,   0, 
+     10,   0,  16,   0,   1,   0, 
+      0,   0,  55,   0,   0,   9, 
+    114,  32,  16,   0,   0,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+    150,   7,  16,   0,   1,   0, 
+      0,   0,  62,   0,   0,   1, 
+     83,  84,  65,  84, 148,   0, 
+      0,   0,  65,   0,   0,   0, 
+      4,   0,   0,   0,   0,   0, 
       0,   0,   4,   0,   0,   0, 
+     27,   0,   0,   0,   3,   0, 
+      0,   0,   2,   0,   0,   0, 
+      6,   0,   0,   0,   4,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   2,   0,   0,   0, 
-      3,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   3,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   7,   0, 
-      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      6,   0,   0,   0,   5,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -690,5 +734,5 @@ const BYTE CustomUIDX11PixelShader[] =
       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
 };

+ 4740 - 368
FactoryCraft/CustomUIDX11VertexShader.h

@@ -24,13 +24,22 @@
 // {
 //
 //   uint lightLength;                  // Offset:    0 Size:     4
+//   float dayLightFactor;              // Offset:    4 Size:     4
 //
 // }
 //
-// cbuffer Light
+// Resource bind info for lightBuffer
 // {
 //
-//   uint4 light[6];                    // Offset:    0 Size:    96
+//   struct VertexLight
+//   {
+//       
+//       uint dayLight1;                // Offset:    0
+//       uint dynamicLight1;            // Offset:    4
+//       uint dayLight2;                // Offset:    8
+//       uint dynamicLight2;            // Offset:   12
+//
+//   } $Element;                        // Offset:    0 Size:    16
 //
 // }
 //
@@ -39,10 +48,10 @@
 //
 // Name                                 Type  Format         Dim      HLSL Bind  Count
 // ------------------------------ ---------- ------- ----------- -------------- ------
+// lightBuffer                       texture  struct         r/o             t0      1 
 // MatrixBuffer                      cbuffer      NA          NA            cb0      1 
 // Kamera                            cbuffer      NA          NA            cb1      1 
 // LightController                   cbuffer      NA          NA            cb2      1 
-// Light                             cbuffer      NA          NA            cb3      1 
 //
 //
 //
@@ -68,11 +77,11 @@
 // TEXCOORD                 2   xyzw        4     NONE   float   xyzw
 //
 vs_5_0
-dcl_globalFlags refactoringAllowed
+dcl_globalFlags refactoringAllowed | skipOptimization
 dcl_constantbuffer CB0[512], dynamicIndexed
 dcl_constantbuffer CB1[8], immediateIndexed
 dcl_constantbuffer CB2[1], immediateIndexed
-dcl_constantbuffer CB3[6], dynamicIndexed
+dcl_resource_structured t0, 16
 dcl_input v0.xyz
 dcl_input v1.xy
 dcl_input v2.xyz
@@ -83,178 +92,325 @@ dcl_output_siv o1.xyzw, position
 dcl_output o2.xy
 dcl_output o3.xyz
 dcl_output o4.xyzw
-dcl_temps 4
-ishl r0.x, v3.x, l(2)
+dcl_temps 6
+//
+// Initial variable locations:
+//   v0.x <- input.position.x; v0.y <- input.position.y; v0.z <- input.position.z; v0.w <- input.position.w; 
+//   v1.x <- input.tex.x; v1.y <- input.tex.y; 
+//   v2.x <- input.normal.x; v2.y <- input.normal.y; v2.z <- input.normal.z; 
+//   v3.x <- input.knochen; 
+//   v4.x <- input.id; 
+//   o4.x <- <TextureVertexShader return value>.light.x; o4.y <- <TextureVertexShader return value>.light.y; o4.z <- <TextureVertexShader return value>.light.z; o4.w <- <TextureVertexShader return value>.light.w; 
+//   o3.x <- <TextureVertexShader return value>.normal.x; o3.y <- <TextureVertexShader return value>.normal.y; o3.z <- <TextureVertexShader return value>.normal.z; 
+//   o2.x <- <TextureVertexShader return value>.tex.x; o2.y <- <TextureVertexShader return value>.tex.y; 
+//   o1.x <- <TextureVertexShader return value>.position.x; o1.y <- <TextureVertexShader return value>.position.y; o1.z <- <TextureVertexShader return value>.position.z; o1.w <- <TextureVertexShader return value>.position.w; 
+//   o0.x <- <TextureVertexShader return value>.worldPos.x; o0.y <- <TextureVertexShader return value>.worldPos.y; o0.z <- <TextureVertexShader return value>.worldPos.z; o0.w <- <TextureVertexShader return value>.worldPos.w
+//
+#line 61 "C:\Users\kolja\Desktop\Kolja-Strohm-Games\Spiele Platform\Standalown\Klient\FactoryCraft\FactoryCraft\DX11CustomVertexShader.hlsl"
+imul null, r0.x, v3.x, l(4)
 dp3 r1.x, v2.xyzx, cb0[r0.x + 0].xyzx
 dp3 r1.y, v2.xyzx, cb0[r0.x + 1].xyzx
 dp3 r1.z, v2.xyzx, cb0[r0.x + 2].xyzx
-dp3 r0.y, r1.xyzx, r1.xyzx
-rsq r0.y, r0.y
-mul o3.xyz, r0.yyyy, r1.xyzx
+dp3 r0.x, r1.xyzx, r1.xyzx
+rsq r0.x, r0.x
+mul r0.xyz, r0.xxxx, r1.xyzx  // r0.x <- output.normal.x; r0.y <- output.normal.y; r0.z <- output.normal.z
+
+#line 65
+mov r1.w, l(1.000000)  // r1.w <- input.position.w
+
+#line 68
+mov r2.xy, v1.xyxx  // r2.x <- output.tex.x; r2.y <- output.tex.y
+
+#line 72
+imul null, r0.w, v3.x, l(4)
 mov r1.xyz, v0.xyzx
-mov r1.w, l(1.000000)
-dp4 r2.x, r1.xyzw, cb0[r0.x + 0].xyzw
-dp4 r2.y, r1.xyzw, cb0[r0.x + 1].xyzw
-dp4 r2.z, r1.xyzw, cb0[r0.x + 2].xyzw
-dp4 r2.w, r1.xyzw, cb0[r0.x + 3].xyzw
-dp4 r0.x, r2.xyzw, cb1[0].xyzw
-dp4 r0.y, r2.xyzw, cb1[1].xyzw
-dp4 r0.z, r2.xyzw, cb1[2].xyzw
-dp4 r0.w, r2.xyzw, cb1[3].xyzw
-dp4 o1.x, r0.xyzw, cb1[4].xyzw
-dp4 o1.y, r0.xyzw, cb1[5].xyzw
-dp4 o1.z, r0.xyzw, cb1[6].xyzw
-dp4 o1.w, r0.xyzw, cb1[7].xyzw
-ieq r0.x, cb2[0].x, l(1)
-if_nz r0.x
-  ushr r0.x, cb3[0].x, l(24)
-  utof r0.x, r0.x
-  mul o4.x, r0.x, l(0.003922)
-  ubfe r0.xy, l(8, 8, 0, 0), l(16, 8, 0, 0), cb3[0].xxxx
-  utof r0.xy, r0.xyxx
-  mul o4.yz, r0.xxyx, l(0.000000, 0.003922, 0.003922, 0.000000)
-  mov o4.w, l(1.000000)
+dp4 r3.x, r1.xyzw, cb0[r0.w + 0].xyzw  // r3.x <- output.worldPos.x
+dp4 r3.y, r1.xyzw, cb0[r0.w + 1].xyzw  // r3.y <- output.worldPos.y
+dp4 r3.z, r1.xyzw, cb0[r0.w + 2].xyzw  // r3.z <- output.worldPos.z
+dp4 r3.w, r1.xyzw, cb0[r0.w + 3].xyzw  // r3.w <- output.worldPos.w
+
+#line 73
+dp4 r1.x, r3.xyzw, cb1[0].xyzw  // r1.x <- output.position.x
+dp4 r1.y, r3.xyzw, cb1[1].xyzw  // r1.y <- output.position.y
+dp4 r1.z, r3.xyzw, cb1[2].xyzw  // r1.z <- output.position.z
+dp4 r1.w, r3.xyzw, cb1[3].xyzw  // r1.w <- output.position.w
+
+#line 74
+dp4 r4.x, r1.xyzw, cb1[4].xyzw  // r4.x <- output.position.x
+dp4 r4.y, r1.xyzw, cb1[5].xyzw  // r4.y <- output.position.y
+dp4 r4.z, r1.xyzw, cb1[6].xyzw  // r4.z <- output.position.z
+dp4 r4.w, r1.xyzw, cb1[7].xyzw  // r4.w <- output.position.w
+
+#line 75
+mov r1.xyzw, l(1.000000,1.000000,1.000000,0)  // r1.x <- output.light.x; r1.y <- output.light.y; r1.z <- output.light.z; r1.w <- output.light.w
+
+#line 78
+mov r0.w, l(1)
+ieq r0.w, r0.w, cb2[0].x
+if_nz r0.w
+
+#line 80
+  mov r0.w, l(0)
+  ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r5.x, r0.w, l(0), t0.xxxx  // r5.x <- dayLight
+
+#line 81
+  mov r0.w, l(0)
+  ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r5.y, r0.w, l(4), t0.xxxx  // r5.y <- dynamicLight
+
+#line 82
 else 
-  ult r0.x, v4.x, cb2[0].x
-  if_nz r0.x
-    and r0.x, v4.x, l(3)
-    ushr r0.y, v4.x, l(2)
-    ineg r0.z, r0.x
-    ult r1.xyz, r0.xxxx, l(1, 2, 3, 0)
-    and r3.y, r0.z, r1.y
-    iadd r0.x, r0.x, l(-3)
-    movc r3.z, r1.y, l(0), r0.x
-    ieq r3.w, r1.z, l(0)
-    mov r3.x, r1.x
-    and r0.xyzw, r3.xyzw, cb3[r0.y + 0].xyzw
-    or r0.xy, r0.ywyy, r0.xzxx
-    or r0.x, r0.y, r0.x
-    ushr r0.y, r0.x, l(24)
-    utof r0.y, r0.y
-    mul o4.x, r0.y, l(0.003922)
-    ubfe r0.xy, l(8, 8, 0, 0), l(16, 8, 0, 0), r0.xxxx
-    utof r0.xy, r0.xyxx
-    mul o4.yz, r0.xxyx, l(0.000000, 0.003922, 0.003922, 0.000000)
-    mov o4.w, l(1.000000)
-  else 
-    mov o4.xyzw, l(1.000000,1.000000,1.000000,0)
+
+#line 83
+  ult r0.w, v4.x, cb2[0].x
+  if_nz r0.w
+    mov r0.w, v4.x  // r0.w <- input.id
+
+#line 85
+    mov r2.z, l(2)
+    udiv null, r2.z, r0.w, r2.z
+    if_z r2.z
+
+#line 87
+      mov r2.z, l(2)
+      udiv r2.z, null, r0.w, r2.z
+      ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r5.x, r2.z, l(0), t0.xxxx  // r5.x <- dayLight
+
+#line 88
+      mov r2.z, l(2)
+      udiv r2.z, null, r0.w, r2.z
+      ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r5.y, r2.z, l(4), t0.xxxx  // r5.y <- dynamicLight
+
+#line 89
+    else 
+
+#line 92
+      mov r2.z, l(2)
+      udiv r2.z, null, r0.w, r2.z
+      ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r5.x, r2.z, l(8), t0.xxxx  // r5.x <- dayLight
+
+#line 93
+      mov r2.z, l(2)
+      udiv r0.w, null, r0.w, r2.z
+      ld_structured_indexable(structured_buffer, stride=16)(mixed,mixed,mixed,mixed) r5.y, r0.w, l(12), t0.xxxx  // r5.y <- dynamicLight
+
+#line 94
+    endif 
+
+#line 95
+  endif   // r5.x <- dayLight; r5.y <- dynamicLight
+endif 
+
+#line 96
+if_nz cb2[0].x
+
+#line 98
+  mov r0.w, l(24)
+  ushr r0.w, r5.x, r0.w
+  and r0.w, r0.w, l(255)
+  utof r0.w, r0.w
+  div r0.w, r0.w, l(255.000000)
+  mul r1.x, r0.w, cb2[0].y
+
+#line 99
+  mov r0.w, l(16)
+  ushr r0.w, r5.x, r0.w
+  and r0.w, r0.w, l(255)
+  utof r0.w, r0.w
+  div r0.w, r0.w, l(255.000000)
+  mul r1.y, r0.w, cb2[0].y
+
+#line 100
+  mov r0.w, l(8)
+  ushr r0.w, r5.x, r0.w
+  and r0.w, r0.w, l(255)
+  utof r0.w, r0.w
+  div r0.w, r0.w, l(255.000000)
+  mul r1.z, r0.w, cb2[0].y
+
+#line 102
+  mov r0.w, l(24)
+  ushr r0.w, r5.y, r0.w
+  and r0.w, r0.w, l(255)
+  utof r0.w, r0.w
+  div r0.w, r0.w, l(255.000000)  // r0.w <- dynamicLightResult.x
+
+#line 103
+  mov r2.z, l(16)
+  ushr r2.z, r5.y, r2.z
+  and r2.z, r2.z, l(255)
+  utof r2.z, r2.z
+  div r2.z, r2.z, l(255.000000)  // r2.z <- dynamicLightResult.y
+
+#line 104
+  mov r2.w, l(8)
+  ushr r2.w, r5.y, r2.w
+  and r2.w, r2.w, l(255)
+  utof r2.w, r2.w
+  div r2.w, r2.w, l(255.000000)  // r2.w <- dynamicLightResult.z
+
+#line 105
+  lt r5.x, r1.x, r0.w
+  if_nz r5.x
+
+#line 107
+    mov r1.x, r0.w
+
+#line 108
+  endif 
+
+#line 109
+  lt r0.w, r1.y, r2.z
+  if_nz r0.w
+
+#line 111
+    mov r1.y, r2.z
+
+#line 112
+  endif 
+
+#line 113
+  lt r0.w, r1.z, r2.w
+  if_nz r0.w
+
+#line 115
+    mov r1.z, r2.w
+
+#line 116
   endif 
+
+#line 117
+  mov r1.w, l(1.000000)
+
+#line 118
 endif 
-mov o0.xyzw, r2.xyzw
-mov o2.xy, v1.xyxx
+
+#line 120
+mov o0.xyzw, r3.xyzw
+mov o1.xyzw, r4.xyzw
+mov o4.xyzw, r1.xyzw
+mov o3.xyz, r0.xyzx
+mov o2.xy, r2.xyxx
 ret 
-// Approximately 59 instruction slots used
+// Approximately 108 instruction slots used
 #endif
 
 const BYTE CustomUIDX11VertexShader[] =
 {
-     68,  88,  66,  67, 183, 247, 
-    128,  57, 121, 121, 234, 221, 
-    166, 174,  29,  35, 177,   9, 
-    164, 190,   1,   0,   0,   0, 
-    140,  12,   0,   0,   5,   0, 
-      0,   0,  52,   0,   0,   0, 
-     80,   3,   0,   0,   8,   4, 
-      0,   0, 176,   4,   0,   0, 
-    240,  11,   0,   0,  82,  68, 
-     69,  70,  20,   3,   0,   0, 
-      4,   0,   0,   0, 232,   0, 
-      0,   0,   4,   0,   0,   0, 
-     60,   0,   0,   0,   0,   5, 
-    254, 255,   0,   1,   0,   0, 
-    236,   2,   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,   0,   0,   0,   0,   0, 
+     68,  88,  66,  67,  81, 197, 
+    157,  78,  52, 126, 197, 177, 
+    168, 209,  51, 183, 221, 101, 
+     58,  44,   1,   0,   0,   0, 
+    140, 111,   0,   0,   6,   0, 
+      0,   0,  56,   0,   0,   0, 
+     76,   4,   0,   0,   4,   5, 
+      0,   0, 172,   5,   0,   0, 
+    232,  16,   0,   0, 132,  17, 
+      0,   0,  82,  68,  69,  70, 
+     12,   4,   0,   0,   4,   0, 
+      0,   0, 236,   0,   0,   0, 
+      4,   0,   0,   0,  60,   0, 
+      0,   0,   0,   5, 254, 255, 
+      5,   1,   0,   0, 228,   3, 
+      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,   0, 
+      0,   0,   5,   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, 
+    200,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       1,   0,   0,   0,   1,   0, 
-      0,   0, 201,   0,   0,   0, 
+      0,   0, 213,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   1,   0, 
       0,   0,   1,   0,   0,   0, 
-      1,   0,   0,   0, 208,   0, 
+      1,   0,   0,   0, 220,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       2,   0,   0,   0,   1,   0, 
       0,   0,   1,   0,   0,   0, 
-    224,   0,   0,   0,   0,   0, 
+    108, 105, 103, 104, 116,  66, 
+    117, 102, 102, 101, 114,   0, 
+     77,  97, 116, 114, 105, 120, 
+     66, 117, 102, 102, 101, 114, 
+      0,  75,  97, 109, 101, 114, 
+     97,   0,  76, 105, 103, 104, 
+    116,  67, 111, 110, 116, 114, 
+    111, 108, 108, 101, 114,   0, 
+    200,   0,   0,   0,   1,   0, 
+      0,   0,  76,   1,   0,   0, 
+      0,  32,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    213,   0,   0,   0,   2,   0, 
+      0,   0, 176,   1,   0,   0, 
+    128,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+    220,   0,   0,   0,   2,   0, 
+      0,   0,  56,   2,   0,   0, 
+     16,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+    188,   0,   0,   0,   1,   0, 
+      0,   0, 252,   2,   0,   0, 
+     16,   0,   0,   0,   0,   0, 
       0,   0,   3,   0,   0,   0, 
-      1,   0,   0,   0,   1,   0, 
-      0,   0,  77,  97, 116, 114, 
-    105, 120,  66, 117, 102, 102, 
-    101, 114,   0,  75,  97, 109, 
-    101, 114,  97,   0,  76, 105, 
-    103, 104, 116,  67, 111, 110, 
-    116, 114, 111, 108, 108, 101, 
-    114,   0,  76, 105, 103, 104, 
-    116,   0, 171, 171, 188,   0, 
-      0,   0,   1,   0,   0,   0, 
-     72,   1,   0,   0,   0,  32, 
+    116,   1,   0,   0,   0,   0, 
+      0,   0,   0,  32,   0,   0, 
+      2,   0,   0,   0, 140,   1, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 201,   0, 
-      0,   0,   2,   0,   0,   0, 
-    172,   1,   0,   0, 128,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 107, 110, 
+    111,  99, 104, 101, 110,  77, 
+     97, 116, 114, 105, 120,   0, 
+    102, 108, 111,  97, 116,  52, 
+    120,  52,   0, 171,   3,   0, 
+      3,   0,   4,   0,   4,   0, 
+    128,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 208,   0, 
-      0,   0,   1,   0,   0,   0, 
-     52,   2,   0,   0,  16,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 224,   0, 
-      0,   0,   1,   0,   0,   0, 
-    148,   2,   0,   0,  96,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 112,   1, 
+    130,   1,   0,   0,   0,   2, 
       0,   0,   0,   0,   0,   0, 
-      0,  32,   0,   0,   2,   0, 
-      0,   0, 136,   1,   0,   0, 
+     64,   0,   0,   0,   2,   0, 
+      0,   0,   8,   2,   0,   0, 
       0,   0,   0,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
     255, 255, 255, 255,   0,   0, 
-      0,   0, 107, 110, 111,  99, 
-    104, 101, 110,  77,  97, 116, 
-    114, 105, 120,   0, 102, 108, 
-    111,  97, 116,  52, 120,  52, 
-      0, 171,   3,   0,   3,   0, 
-      4,   0,   4,   0, 128,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 126,   1, 
-      0,   0, 252,   1,   0,   0, 
-      0,   0,   0,   0,  64,   0, 
+      0,   0,  44,   2,   0,   0, 
+     64,   0,   0,   0,  64,   0, 
       0,   0,   2,   0,   0,   0, 
-      4,   2,   0,   0,   0,   0, 
+      8,   2,   0,   0,   0,   0, 
       0,   0, 255, 255, 255, 255, 
       0,   0,   0,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
-     40,   2,   0,   0,  64,   0, 
-      0,   0,  64,   0,   0,   0, 
-      2,   0,   0,   0,   4,   2, 
-      0,   0,   0,   0,   0,   0, 
-    255, 255, 255, 255,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-      0,   0,   0,   0, 118, 105, 
-    101, 119,   0, 171, 171, 171, 
-      3,   0,   3,   0,   4,   0, 
-      4,   0,   0,   0,   0,   0, 
+    118, 105, 101, 119,   0, 171, 
+    171, 171,   3,   0,   3,   0, 
+      4,   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, 126,   1,   0,   0, 
-    112, 114, 111, 106, 101,  99, 
-    116, 105, 111, 110,   0, 171, 
-     92,   2,   0,   0,   0,   0, 
+      0,   0,   0,   0, 130,   1, 
+      0,   0, 112, 114, 111, 106, 
+    101,  99, 116, 105, 111, 110, 
+      0, 171, 136,   2,   0,   0, 
+      0,   0,   0,   0,   4,   0, 
+      0,   0,   2,   0,   0,   0, 
+    156,   2,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+    192,   2,   0,   0,   4,   0, 
       0,   0,   4,   0,   0,   0, 
-      2,   0,   0,   0, 112,   2, 
+      2,   0,   0,   0, 216,   2, 
       0,   0,   0,   0,   0,   0, 
     255, 255, 255, 255,   0,   0, 
       0,   0, 255, 255, 255, 255, 
@@ -267,22 +423,56 @@ const BYTE CustomUIDX11VertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 104,   2,   0,   0, 
-    188,   2,   0,   0,   0,   0, 
-      0,   0,  96,   0,   0,   0, 
-      2,   0,   0,   0, 200,   2, 
+      0,   0, 148,   2,   0,   0, 
+    100,  97, 121,  76, 105, 103, 
+    104, 116,  70,  97,  99, 116, 
+    111, 114,   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, 207,   2,   0,   0, 
+     36,   3,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0, 192,   3, 
       0,   0,   0,   0,   0,   0, 
     255, 255, 255, 255,   0,   0, 
       0,   0, 255, 255, 255, 255, 
-      0,   0,   0,   0, 108, 105, 
-    103, 104, 116,   0, 117, 105, 
-    110, 116,  52,   0,   1,   0, 
-     19,   0,   1,   0,   4,   0, 
-      6,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  36,  69, 
+    108, 101, 109, 101, 110, 116, 
+      0,  86, 101, 114, 116, 101, 
+    120,  76, 105, 103, 104, 116, 
+      0, 100,  97, 121,  76, 105, 
+    103, 104, 116,  49,   0, 171, 
+      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, 148,   2,   0,   0, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     49,   0, 100,  97, 121,  76, 
+    105, 103, 104, 116,  50,   0, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     50,   0, 171, 171,  57,   3, 
+      0,   0,  68,   3,   0,   0, 
+      0,   0,   0,   0, 104,   3, 
+      0,   0,  68,   3,   0,   0, 
+      4,   0,   0,   0, 118,   3, 
+      0,   0,  68,   3,   0,   0, 
+      8,   0,   0,   0, 128,   3, 
+      0,   0,  68,   3,   0,   0, 
+     12,   0,   0,   0,   5,   0, 
+      0,   0,   1,   0,   4,   0, 
+      0,   0,   4,   0, 144,   3, 
       0,   0,   0,   0,   0,   0, 
-    194,   2,   0,   0,  77, 105, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     45,   3,   0,   0,  77, 105, 
      99, 114, 111, 115, 111, 102, 
     116,  32,  40,  82,  41,  32, 
      72,  76,  83,  76,  32,  83, 
@@ -348,9 +538,9 @@ const BYTE CustomUIDX11VertexShader[] =
      83,  73,  84,  73,  79,  78, 
       0,  84,  69,  88,  67,  79, 
      79,  82,  68,   0, 171, 171, 
-     83,  72,  69,  88,  56,   7, 
+     83,  72,  69,  88,  52,  11, 
       0,   0,  80,   0,   1,   0, 
-    206,   1,   0,   0, 106,   8, 
+    205,   2,   0,   0, 106, 136, 
       0,   1,  89,   8,   0,   4, 
      70, 142,  32,   0,   0,   0, 
       0,   0,   0,   2,   0,   0, 
@@ -359,9 +549,9 @@ const BYTE CustomUIDX11VertexShader[] =
       8,   0,   0,   0,  89,   0, 
       0,   4,  70, 142,  32,   0, 
       2,   0,   0,   0,   1,   0, 
-      0,   0,  89,   8,   0,   4, 
-     70, 142,  32,   0,   3,   0, 
-      0,   0,   6,   0,   0,   0, 
+      0,   0, 162,   0,   0,   4, 
+      0, 112,  16,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
      95,   0,   0,   3, 114,  16, 
      16,   0,   0,   0,   0,   0, 
      95,   0,   0,   3,  50,  16, 
@@ -383,296 +573,4478 @@ const BYTE CustomUIDX11VertexShader[] =
       3,   0,   0,   0, 101,   0, 
       0,   3, 242,  32,  16,   0, 
       4,   0,   0,   0, 104,   0, 
-      0,   2,   4,   0,   0,   0, 
-     41,   0,   0,   7,  18,   0, 
-     16,   0,   0,   0,   0,   0, 
-     10,  16,  16,   0,   3,   0, 
-      0,   0,   1,  64,   0,   0, 
-      2,   0,   0,   0,  16,   0, 
-      0,   9,  18,   0,  16,   0, 
-      1,   0,   0,   0,  70,  18, 
-     16,   0,   2,   0,   0,   0, 
-     70, 130,  32,   4,   0,   0, 
-      0,   0,  10,   0,  16,   0, 
-      0,   0,   0,   0,  16,   0, 
-      0,  10,  34,   0,  16,   0, 
-      1,   0,   0,   0,  70,  18, 
-     16,   0,   2,   0,   0,   0, 
-     70, 130,  32,   6,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
+      0,   2,   6,   0,   0,   0, 
+     38,   0,   0,   8,   0, 208, 
+      0,   0,  18,   0,  16,   0, 
+      0,   0,   0,   0,  10,  16, 
+     16,   0,   3,   0,   0,   0, 
+      1,  64,   0,   0,   4,   0, 
+      0,   0,  16,   0,   0,   9, 
+     18,   0,  16,   0,   1,   0, 
+      0,   0,  70,  18,  16,   0, 
+      2,   0,   0,   0,  70, 130, 
+     32,   4,   0,   0,   0,   0, 
      10,   0,  16,   0,   0,   0, 
       0,   0,  16,   0,   0,  10, 
-     66,   0,  16,   0,   1,   0, 
+     34,   0,  16,   0,   1,   0, 
       0,   0,  70,  18,  16,   0, 
       2,   0,   0,   0,  70, 130, 
      32,   6,   0,   0,   0,   0, 
-      2,   0,   0,   0,  10,   0, 
-     16,   0,   0,   0,   0,   0, 
-     16,   0,   0,   7,  34,   0, 
+      1,   0,   0,   0,  10,   0, 
      16,   0,   0,   0,   0,   0, 
+     16,   0,   0,  10,  66,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70,  18,  16,   0,   2,   0, 
+      0,   0,  70, 130,  32,   6, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,  10,   0,  16,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   7,  18,   0,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   1,   0,   0,   0, 
      70,   2,  16,   0,   1,   0, 
-      0,   0,  70,   2,  16,   0, 
-      1,   0,   0,   0,  68,   0, 
-      0,   5,  34,   0,  16,   0, 
-      0,   0,   0,   0,  26,   0, 
+      0,   0,  68,   0,   0,   5, 
+     18,   0,  16,   0,   0,   0, 
+      0,   0,  10,   0,  16,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   7, 114,   0,  16,   0, 
+      0,   0,   0,   0,   6,   0, 
      16,   0,   0,   0,   0,   0, 
-     56,   0,   0,   7, 114,  32, 
+     70,   2,  16,   0,   1,   0, 
+      0,   0,  54,   0,   0,   5, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0, 128,  63,  54,   0, 
+      0,   5,  50,   0,  16,   0, 
+      2,   0,   0,   0,  70,  16, 
+     16,   0,   1,   0,   0,   0, 
+     38,   0,   0,   8,   0, 208, 
+      0,   0, 130,   0,  16,   0, 
+      0,   0,   0,   0,  10,  16, 
      16,   0,   3,   0,   0,   0, 
-     86,   5,  16,   0,   0,   0, 
-      0,   0,  70,   2,  16,   0, 
-      1,   0,   0,   0,  54,   0, 
-      0,   5, 114,   0,  16,   0, 
-      1,   0,   0,   0,  70,  18, 
-     16,   0,   0,   0,   0,   0, 
-     54,   0,   0,   5, 130,   0, 
+      1,  64,   0,   0,   4,   0, 
+      0,   0,  54,   0,   0,   5, 
+    114,   0,  16,   0,   1,   0, 
+      0,   0,  70,  18,  16,   0, 
+      0,   0,   0,   0,  17,   0, 
+      0,   9,  18,   0,  16,   0, 
+      3,   0,   0,   0,  70,  14, 
      16,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0,   0,   0, 
-    128,  63,  17,   0,   0,   9, 
-     18,   0,  16,   0,   2,   0, 
-      0,   0,  70,  14,  16,   0, 
-      1,   0,   0,   0,  70, 142, 
-     32,   4,   0,   0,   0,   0, 
-     10,   0,  16,   0,   0,   0, 
+     70, 142,  32,   4,   0,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,  17,   0, 
+      0,  10,  34,   0,  16,   0, 
+      3,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
+     70, 142,  32,   6,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
       0,   0,  17,   0,   0,  10, 
-     34,   0,  16,   0,   2,   0, 
+     66,   0,  16,   0,   3,   0, 
       0,   0,  70,  14,  16,   0, 
       1,   0,   0,   0,  70, 142, 
      32,   6,   0,   0,   0,   0, 
-      1,   0,   0,   0,  10,   0, 
+      2,   0,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
-     17,   0,   0,  10,  66,   0, 
-     16,   0,   2,   0,   0,   0, 
+     17,   0,   0,  10, 130,   0, 
+     16,   0,   3,   0,   0,   0, 
      70,  14,  16,   0,   1,   0, 
       0,   0,  70, 142,  32,   6, 
-      0,   0,   0,   0,   2,   0, 
-      0,   0,  10,   0,  16,   0, 
-      0,   0,   0,   0,  17,   0, 
-      0,  10, 130,   0,  16,   0, 
-      2,   0,   0,   0,  70,  14, 
-     16,   0,   1,   0,   0,   0, 
-     70, 142,  32,   6,   0,   0, 
-      0,   0,   3,   0,   0,   0, 
-     10,   0,  16,   0,   0,   0, 
-      0,   0,  17,   0,   0,   8, 
-     18,   0,  16,   0,   0,   0, 
-      0,   0,  70,  14,  16,   0, 
-      2,   0,   0,   0,  70, 142, 
-     32,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,  58,   0,  16,   0, 
       0,   0,   0,   0,  17,   0, 
-      0,   8,  34,   0,  16,   0, 
-      0,   0,   0,   0,  70,  14, 
-     16,   0,   2,   0,   0,   0, 
+      0,   8,  18,   0,  16,   0, 
+      1,   0,   0,   0,  70,  14, 
+     16,   0,   3,   0,   0,   0, 
      70, 142,  32,   0,   1,   0, 
-      0,   0,   1,   0,   0,   0, 
-     17,   0,   0,   8,  66,   0, 
-     16,   0,   0,   0,   0,   0, 
-     70,  14,  16,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+     17,   0,   0,   8,  34,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70,  14,  16,   0,   3,   0, 
       0,   0,  70, 142,  32,   0, 
-      1,   0,   0,   0,   2,   0, 
+      1,   0,   0,   0,   1,   0, 
       0,   0,  17,   0,   0,   8, 
-    130,   0,  16,   0,   0,   0, 
+     66,   0,  16,   0,   1,   0, 
       0,   0,  70,  14,  16,   0, 
-      2,   0,   0,   0,  70, 142, 
+      3,   0,   0,   0,  70, 142, 
      32,   0,   1,   0,   0,   0, 
-      3,   0,   0,   0,  17,   0, 
-      0,   8,  18,  32,  16,   0, 
+      2,   0,   0,   0,  17,   0, 
+      0,   8, 130,   0,  16,   0, 
       1,   0,   0,   0,  70,  14, 
-     16,   0,   0,   0,   0,   0, 
+     16,   0,   3,   0,   0,   0, 
      70, 142,  32,   0,   1,   0, 
-      0,   0,   4,   0,   0,   0, 
-     17,   0,   0,   8,  34,  32, 
-     16,   0,   1,   0,   0,   0, 
-     70,  14,  16,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+     17,   0,   0,   8,  18,   0, 
+     16,   0,   4,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
       0,   0,  70, 142,  32,   0, 
-      1,   0,   0,   0,   5,   0, 
+      1,   0,   0,   0,   4,   0, 
       0,   0,  17,   0,   0,   8, 
-     66,  32,  16,   0,   1,   0, 
+     34,   0,  16,   0,   4,   0, 
       0,   0,  70,  14,  16,   0, 
-      0,   0,   0,   0,  70, 142, 
+      1,   0,   0,   0,  70, 142, 
      32,   0,   1,   0,   0,   0, 
-      6,   0,   0,   0,  17,   0, 
-      0,   8, 130,  32,  16,   0, 
-      1,   0,   0,   0,  70,  14, 
-     16,   0,   0,   0,   0,   0, 
+      5,   0,   0,   0,  17,   0, 
+      0,   8,  66,   0,  16,   0, 
+      4,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
      70, 142,  32,   0,   1,   0, 
-      0,   0,   7,   0,   0,   0, 
-     32,   0,   0,   8,  18,   0, 
+      0,   0,   6,   0,   0,   0, 
+     17,   0,   0,   8, 130,   0, 
+     16,   0,   4,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  70, 142,  32,   0, 
+      1,   0,   0,   0,   7,   0, 
+      0,   0,  54,   0,   0,   8, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,   2,  64,   0,   0, 
+      0,   0, 128,  63,   0,   0, 
+    128,  63,   0,   0, 128,  63, 
+      0,   0,   0,   0,  54,   0, 
+      0,   5, 130,   0,  16,   0, 
+      0,   0,   0,   0,   1,  64, 
+      0,   0,   1,   0,   0,   0, 
+     32,   0,   0,   8, 130,   0, 
      16,   0,   0,   0,   0,   0, 
-     10, 128,  32,   0,   2,   0, 
-      0,   0,   0,   0,   0,   0, 
-      1,  64,   0,   0,   1,   0, 
-      0,   0,  31,   0,   4,   3, 
-     10,   0,  16,   0,   0,   0, 
-      0,   0,  85,   0,   0,   8, 
-     18,   0,  16,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
       0,   0,  10, 128,  32,   0, 
-      3,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,  31,   0,   4,   3, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,  54,   0,   0,   5, 
+    130,   0,  16,   0,   0,   0, 
       0,   0,   1,  64,   0,   0, 
-     24,   0,   0,   0,  86,   0, 
-      0,   5,  18,   0,  16,   0, 
-      0,   0,   0,   0,  10,   0, 
-     16,   0,   0,   0,   0,   0, 
-     56,   0,   0,   7,  18,  32, 
-     16,   0,   4,   0,   0,   0, 
-     10,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0, 167,   0, 
+      0, 139,   2, 131,   0, 128, 
+    131, 153,  25,   0,  18,   0, 
+     16,   0,   5,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
       0,   0,   1,  64,   0,   0, 
-    129, 128, 128,  59, 138,   0, 
-      0,  16,  50,   0,  16,   0, 
-      0,   0,   0,   0,   2,  64, 
-      0,   0,   8,   0,   0,   0, 
-      8,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      2,  64,   0,   0,  16,   0, 
-      0,   0,   8,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   6, 128,  32,   0, 
-      3,   0,   0,   0,   0,   0, 
-      0,   0,  86,   0,   0,   5, 
-     50,   0,  16,   0,   0,   0, 
-      0,   0,  70,   0,  16,   0, 
-      0,   0,   0,   0,  56,   0, 
-      0,  10,  98,  32,  16,   0, 
-      4,   0,   0,   0,   6,   1, 
+      0,   0,   0,   0,   6, 112, 
      16,   0,   0,   0,   0,   0, 
-      2,  64,   0,   0,   0,   0, 
-      0,   0, 129, 128, 128,  59, 
-    129, 128, 128,  59,   0,   0, 
-      0,   0,  54,   0,   0,   5, 
-    130,  32,  16,   0,   4,   0, 
-      0,   0,   1,  64,   0,   0, 
-      0,   0, 128,  63,  18,   0, 
+     54,   0,   0,   5, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0, 167,   0,   0, 139, 
+      2, 131,   0, 128, 131, 153, 
+     25,   0,  34,   0,  16,   0, 
+      5,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+      1,  64,   0,   0,   4,   0, 
+      0,   0,   6, 112,  16,   0, 
+      0,   0,   0,   0,  18,   0, 
       0,   1,  79,   0,   0,   8, 
-     18,   0,  16,   0,   0,   0, 
+    130,   0,  16,   0,   0,   0, 
       0,   0,  10,  16,  16,   0, 
       4,   0,   0,   0,  10, 128, 
      32,   0,   2,   0,   0,   0, 
       0,   0,   0,   0,  31,   0, 
-      4,   3,  10,   0,  16,   0, 
-      0,   0,   0,   0,   1,   0, 
-      0,   7,  18,   0,  16,   0, 
+      4,   3,  58,   0,  16,   0, 
+      0,   0,   0,   0,  54,   0, 
+      0,   5, 130,   0,  16,   0, 
       0,   0,   0,   0,  10,  16, 
      16,   0,   4,   0,   0,   0, 
-      1,  64,   0,   0,   3,   0, 
-      0,   0,  85,   0,   0,   7, 
-     34,   0,  16,   0,   0,   0, 
-      0,   0,  10,  16,  16,   0, 
-      4,   0,   0,   0,   1,  64, 
+     54,   0,   0,   5,  66,   0, 
+     16,   0,   2,   0,   0,   0, 
+      1,  64,   0,   0,   2,   0, 
+      0,   0,  78,   0,   0,   8, 
+      0, 208,   0,   0,  66,   0, 
+     16,   0,   2,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,  42,   0,  16,   0, 
+      2,   0,   0,   0,  31,   0, 
+      0,   3,  42,   0,  16,   0, 
+      2,   0,   0,   0,  54,   0, 
+      0,   5,  66,   0,  16,   0, 
+      2,   0,   0,   0,   1,  64, 
       0,   0,   2,   0,   0,   0, 
-     40,   0,   0,   5,  66,   0, 
+     78,   0,   0,   8,  66,   0, 
+     16,   0,   2,   0,   0,   0, 
+      0, 208,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
-     10,   0,  16,   0,   0,   0, 
-      0,   0,  79,   0,   0,  10, 
-    114,   0,  16,   0,   1,   0, 
-      0,   0,   6,   0,  16,   0, 
-      0,   0,   0,   0,   2,  64, 
-      0,   0,   1,   0,   0,   0, 
-      2,   0,   0,   0,   3,   0, 
-      0,   0,   0,   0,   0,   0, 
-      1,   0,   0,   7,  34,   0, 
-     16,   0,   3,   0,   0,   0, 
-     42,   0,  16,   0,   0,   0, 
-      0,   0,  26,   0,  16,   0, 
-      1,   0,   0,   0,  30,   0, 
-      0,   7,  18,   0,  16,   0, 
-      0,   0,   0,   0,  10,   0, 
+     42,   0,  16,   0,   2,   0, 
+      0,   0, 167,   0,   0, 139, 
+      2, 131,   0, 128, 131, 153, 
+     25,   0,  18,   0,  16,   0, 
+      5,   0,   0,   0,  42,   0, 
+     16,   0,   2,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0,   6, 112,  16,   0, 
+      0,   0,   0,   0,  54,   0, 
+      0,   5,  66,   0,  16,   0, 
+      2,   0,   0,   0,   1,  64, 
+      0,   0,   2,   0,   0,   0, 
+     78,   0,   0,   8,  66,   0, 
+     16,   0,   2,   0,   0,   0, 
+      0, 208,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
-      1,  64,   0,   0, 253, 255, 
-    255, 255,  55,   0,   0,   9, 
-     66,   0,  16,   0,   3,   0, 
-      0,   0,  26,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,   0,   0,   0,   0, 
-     10,   0,  16,   0,   0,   0, 
-      0,   0,  32,   0,   0,   7, 
-    130,   0,  16,   0,   3,   0, 
+     42,   0,  16,   0,   2,   0, 
+      0,   0, 167,   0,   0, 139, 
+      2, 131,   0, 128, 131, 153, 
+     25,   0,  34,   0,  16,   0, 
+      5,   0,   0,   0,  42,   0, 
+     16,   0,   2,   0,   0,   0, 
+      1,  64,   0,   0,   4,   0, 
+      0,   0,   6, 112,  16,   0, 
+      0,   0,   0,   0,  18,   0, 
+      0,   1,  54,   0,   0,   5, 
+     66,   0,  16,   0,   2,   0, 
+      0,   0,   1,  64,   0,   0, 
+      2,   0,   0,   0,  78,   0, 
+      0,   8,  66,   0,  16,   0, 
+      2,   0,   0,   0,   0, 208, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,  42,   0, 
+     16,   0,   2,   0,   0,   0, 
+    167,   0,   0, 139,   2, 131, 
+      0, 128, 131, 153,  25,   0, 
+     18,   0,  16,   0,   5,   0, 
       0,   0,  42,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
+      2,   0,   0,   0,   1,  64, 
+      0,   0,   8,   0,   0,   0, 
+      6, 112,  16,   0,   0,   0, 
+      0,   0,  54,   0,   0,   5, 
+     66,   0,  16,   0,   2,   0, 
+      0,   0,   1,  64,   0,   0, 
+      2,   0,   0,   0,  78,   0, 
+      0,   8, 130,   0,  16,   0, 
+      0,   0,   0,   0,   0, 208, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,  42,   0, 
+     16,   0,   2,   0,   0,   0, 
+    167,   0,   0, 139,   2, 131, 
+      0, 128, 131, 153,  25,   0, 
+     34,   0,  16,   0,   5,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,   1,  64, 
+      0,   0,  12,   0,   0,   0, 
+      6, 112,  16,   0,   0,   0, 
+      0,   0,  21,   0,   0,   1, 
+     21,   0,   0,   1,  21,   0, 
+      0,   1,  31,   0,   4,   4, 
+     10, 128,  32,   0,   2,   0, 
       0,   0,   0,   0,   0,   0, 
-     54,   0,   0,   5,  18,   0, 
-     16,   0,   3,   0,   0,   0, 
-     10,   0,  16,   0,   1,   0, 
-      0,   0,   1,   0,   0,   9, 
-    242,   0,  16,   0,   0,   0, 
-      0,   0,  70,  14,  16,   0, 
-      3,   0,   0,   0,  70, 142, 
-     32,   4,   3,   0,   0,   0, 
-     26,   0,  16,   0,   0,   0, 
-      0,   0,  60,   0,   0,   7, 
-     50,   0,  16,   0,   0,   0, 
-      0,   0, 214,   5,  16,   0, 
-      0,   0,   0,   0, 134,   0, 
+     54,   0,   0,   5, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+      1,  64,   0,   0,  24,   0, 
+      0,   0,  85,   0,   0,   7, 
+    130,   0,  16,   0,   0,   0, 
+      0,   0,  10,   0,  16,   0, 
+      5,   0,   0,   0,  58,   0, 
+     16,   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,   1,  64,   0,   0, 
+    255,   0,   0,   0,  86,   0, 
+      0,   5, 130,   0,  16,   0, 
+      0,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+     14,   0,   0,   7, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0, 127,  67,  56,   0, 
+      0,   8,  18,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+     26, 128,  32,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+     54,   0,   0,   5, 130,   0, 
      16,   0,   0,   0,   0,   0, 
-     60,   0,   0,   7,  18,   0, 
+      1,  64,   0,   0,  16,   0, 
+      0,   0,  85,   0,   0,   7, 
+    130,   0,  16,   0,   0,   0, 
+      0,   0,  10,   0,  16,   0, 
+      5,   0,   0,   0,  58,   0, 
+     16,   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,   1,  64,   0,   0, 
+    255,   0,   0,   0,  86,   0, 
+      0,   5, 130,   0,  16,   0, 
+      0,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+     14,   0,   0,   7, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0, 127,  67,  56,   0, 
+      0,   8,  34,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+     26, 128,  32,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+     54,   0,   0,   5, 130,   0, 
      16,   0,   0,   0,   0,   0, 
-     26,   0,  16,   0,   0,   0, 
+      1,  64,   0,   0,   8,   0, 
+      0,   0,  85,   0,   0,   7, 
+    130,   0,  16,   0,   0,   0, 
       0,   0,  10,   0,  16,   0, 
-      0,   0,   0,   0,  85,   0, 
-      0,   7,  34,   0,  16,   0, 
-      0,   0,   0,   0,  10,   0, 
+      5,   0,   0,   0,  58,   0, 
+     16,   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,   1,  64,   0,   0, 
+    255,   0,   0,   0,  86,   0, 
+      0,   5, 130,   0,  16,   0, 
+      0,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+     14,   0,   0,   7, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0, 127,  67,  56,   0, 
+      0,   8,  66,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+     26, 128,  32,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+     54,   0,   0,   5, 130,   0, 
      16,   0,   0,   0,   0,   0, 
       1,  64,   0,   0,  24,   0, 
-      0,   0,  86,   0,   0,   5, 
-     34,   0,  16,   0,   0,   0, 
+      0,   0,  85,   0,   0,   7, 
+    130,   0,  16,   0,   0,   0, 
       0,   0,  26,   0,  16,   0, 
-      0,   0,   0,   0,  56,   0, 
-      0,   7,  18,  32,  16,   0, 
-      4,   0,   0,   0,  26,   0, 
+      5,   0,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
-      1,  64,   0,   0, 129, 128, 
-    128,  59, 138,   0,   0,  15, 
-     50,   0,  16,   0,   0,   0, 
-      0,   0,   2,  64,   0,   0, 
-      8,   0,   0,   0,   8,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   2,  64, 
+      1,   0,   0,   7, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,   1,  64,   0,   0, 
+    255,   0,   0,   0,  86,   0, 
+      0,   5, 130,   0,  16,   0, 
+      0,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+     14,   0,   0,   7, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,   1,  64,   0,   0, 
+      0,   0, 127,  67,  54,   0, 
+      0,   5,  66,   0,  16,   0, 
+      2,   0,   0,   0,   1,  64, 
       0,   0,  16,   0,   0,   0, 
-      8,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      6,   0,  16,   0,   0,   0, 
+     85,   0,   0,   7,  66,   0, 
+     16,   0,   2,   0,   0,   0, 
+     26,   0,  16,   0,   5,   0, 
+      0,   0,  42,   0,  16,   0, 
+      2,   0,   0,   0,   1,   0, 
+      0,   7,  66,   0,  16,   0, 
+      2,   0,   0,   0,  42,   0, 
+     16,   0,   2,   0,   0,   0, 
+      1,  64,   0,   0, 255,   0, 
       0,   0,  86,   0,   0,   5, 
-     50,   0,  16,   0,   0,   0, 
-      0,   0,  70,   0,  16,   0, 
-      0,   0,   0,   0,  56,   0, 
-      0,  10,  98,  32,  16,   0, 
-      4,   0,   0,   0,   6,   1, 
+     66,   0,  16,   0,   2,   0, 
+      0,   0,  42,   0,  16,   0, 
+      2,   0,   0,   0,  14,   0, 
+      0,   7,  66,   0,  16,   0, 
+      2,   0,   0,   0,  42,   0, 
+     16,   0,   2,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+    127,  67,  54,   0,   0,   5, 
+    130,   0,  16,   0,   2,   0, 
+      0,   0,   1,  64,   0,   0, 
+      8,   0,   0,   0,  85,   0, 
+      0,   7, 130,   0,  16,   0, 
+      2,   0,   0,   0,  26,   0, 
+     16,   0,   5,   0,   0,   0, 
+     58,   0,  16,   0,   2,   0, 
+      0,   0,   1,   0,   0,   7, 
+    130,   0,  16,   0,   2,   0, 
+      0,   0,  58,   0,  16,   0, 
+      2,   0,   0,   0,   1,  64, 
+      0,   0, 255,   0,   0,   0, 
+     86,   0,   0,   5, 130,   0, 
+     16,   0,   2,   0,   0,   0, 
+     58,   0,  16,   0,   2,   0, 
+      0,   0,  14,   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, 127,  67, 
+     49,   0,   0,   7,  18,   0, 
+     16,   0,   5,   0,   0,   0, 
+     10,   0,  16,   0,   1,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,  31,   0, 
+      4,   3,  10,   0,  16,   0, 
+      5,   0,   0,   0,  54,   0, 
+      0,   5,  18,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
-      2,  64,   0,   0,   0,   0, 
-      0,   0, 129, 128, 128,  59, 
-    129, 128, 128,  59,   0,   0, 
+     21,   0,   0,   1,  49,   0, 
+      0,   7, 130,   0,  16,   0, 
+      0,   0,   0,   0,  26,   0, 
+     16,   0,   1,   0,   0,   0, 
+     42,   0,  16,   0,   2,   0, 
+      0,   0,  31,   0,   4,   3, 
+     58,   0,  16,   0,   0,   0, 
       0,   0,  54,   0,   0,   5, 
-    130,  32,  16,   0,   4,   0, 
-      0,   0,   1,  64,   0,   0, 
-      0,   0, 128,  63,  18,   0, 
-      0,   1,  54,   0,   0,   8, 
-    242,  32,  16,   0,   4,   0, 
-      0,   0,   2,  64,   0,   0, 
-      0,   0, 128,  63,   0,   0, 
-    128,  63,   0,   0, 128,  63, 
-      0,   0,   0,   0,  21,   0, 
-      0,   1,  21,   0,   0,   1, 
+     34,   0,  16,   0,   1,   0, 
+      0,   0,  42,   0,  16,   0, 
+      2,   0,   0,   0,  21,   0, 
+      0,   1,  49,   0,   0,   7, 
+    130,   0,  16,   0,   0,   0, 
+      0,   0,  42,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   2,   0,   0,   0, 
+     31,   0,   4,   3,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+     54,   0,   0,   5,  66,   0, 
+     16,   0,   1,   0,   0,   0, 
+     58,   0,  16,   0,   2,   0, 
+      0,   0,  21,   0,   0,   1, 
+     54,   0,   0,   5, 130,   0, 
+     16,   0,   1,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+    128,  63,  21,   0,   0,   1, 
      54,   0,   0,   5, 242,  32, 
      16,   0,   0,   0,   0,   0, 
-     70,  14,  16,   0,   2,   0, 
+     70,  14,  16,   0,   3,   0, 
+      0,   0,  54,   0,   0,   5, 
+    242,  32,  16,   0,   1,   0, 
+      0,   0,  70,  14,  16,   0, 
+      4,   0,   0,   0,  54,   0, 
+      0,   5, 242,  32,  16,   0, 
+      4,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
+     54,   0,   0,   5, 114,  32, 
+     16,   0,   3,   0,   0,   0, 
+     70,   2,  16,   0,   0,   0, 
       0,   0,  54,   0,   0,   5, 
      50,  32,  16,   0,   2,   0, 
-      0,   0,  70,  16,  16,   0, 
-      1,   0,   0,   0,  62,   0, 
+      0,   0,  70,   0,  16,   0, 
+      2,   0,   0,   0,  62,   0, 
       0,   1,  83,  84,  65,  84, 
-    148,   0,   0,   0,  59,   0, 
-      0,   0,   4,   0,   0,   0, 
+    148,   0,   0,   0, 108,   0, 
+      0,   0,   6,   0,   0,   0, 
       0,   0,   0,   0,  10,   0, 
-      0,   0,  22,   0,   0,   0, 
-      5,   0,   0,   0,  10,   0, 
-      0,   0,   3,   0,   0,   0, 
-      2,   0,   0,   0,   0,   0, 
+      0,   0,  30,   0,   0,   0, 
+      3,   0,   0,   0,  18,   0, 
+      0,   0,   4,   0,   0,   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, 
+      0,   0,   0,   0,   6,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  28,   0,   0,   0, 
+      0,   0,   0,   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,   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,  83,  80,  68,  66, 
+      0,  94,   0,   0,  77, 105, 
+     99, 114, 111, 115, 111, 102, 
+    116,  32,  67,  47,  67,  43, 
+     43,  32,  77,  83,  70,  32, 
+     55,  46,  48,  48,  13,  10, 
+     26,  68,  83,   0,   0,   0, 
+      0,   2,   0,   0,   2,   0, 
+      0,   0,  47,   0,   0,   0, 
+    216,   0,   0,   0,   0,   0, 
+      0,   0,  43,   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, 
+      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,   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, 
+      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,   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, 
+      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,   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, 
+      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,   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, 
+    192, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255,  56,   0,   0,   0, 
+      0, 240, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255,   5,   0, 
+      0,   0,  32,   0,   0,   0, 
+     60,   0,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0,   6,   0, 
+      0,   0,   5,   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, 
+      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,   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, 
+      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,   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, 
+      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,   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, 
+      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,   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, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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, 148,  46,  49,   1, 
+    246, 205, 243,  99,   1,   0, 
+      0,   0, 126,  73, 155,   7, 
+     12,   9,  91,  68, 152, 228, 
+    190,  13, 189, 245, 129, 235, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 220,  81, 
+     51,   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,   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,   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,   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,   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,   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,   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,   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,   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,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  10,  99, 
+     98, 117, 102, 102, 101, 114, 
+     32,  76, 105, 103, 104, 116, 
+     67, 111, 110, 116, 114, 111, 
+    108, 108, 101, 114,  32,  58, 
+     32, 114, 101, 103, 105, 115, 
+    116, 101, 114,  40,  98,  50, 
+     41,  13,  10, 123,  13,  10, 
+     32,  32,  32,  32, 117, 105, 
+    110, 116,  32, 108, 105, 103, 
+    104, 116,  76, 101, 110, 103, 
+    116, 104,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  32, 100,  97, 121, 
+     76, 105, 103, 104, 116,  70, 
+     97,  99, 116, 111, 114,  59, 
+     13,  10, 125,  13,  10,  13, 
+     10,  47,  47,  32, 115, 116, 
+    111, 114, 101, 115,  32, 116, 
+    104, 101,  32, 108, 105, 103, 
+    104, 116,  32, 102, 111, 114, 
+     32, 116, 119, 111,  32, 118, 
+    101, 114, 116, 105,  99, 105, 
+    101, 115,  13,  10, 115, 116, 
+    114, 117,  99, 116,  32,  86, 
+    101, 114, 116, 101, 120,  76, 
+    105, 103, 104, 116,  13,  10, 
+    123,  13,  10,  32,  32,  32, 
+     32, 117, 105, 110, 116,  32, 
+    100,  97, 121,  76, 105, 103, 
+    104, 116,  49,  59,  13,  10, 
+     32,  32,  32,  32, 117, 105, 
+    110, 116,  32, 100, 121, 110, 
+     97, 109, 105,  99,  76, 105, 
+    103, 104, 116,  49,  59,  13, 
+     10,  32,  32,  32,  32, 117, 
+    105, 110, 116,  32, 100,  97, 
+    121,  76, 105, 103, 104, 116, 
+     50,  59,  13,  10,  32,  32, 
+     32,  32, 117, 105, 110, 116, 
+     32, 100, 121, 110,  97, 109, 
+    105,  99,  76, 105, 103, 104, 
+    116,  50,  59,  13,  10, 125, 
+     59,  13,  10,  13,  10,  83, 
+    116, 114, 117,  99, 116, 117, 
+    114, 101, 100,  66, 117, 102, 
+    102, 101, 114,  60,  86, 101, 
+    114, 116, 101, 120,  76, 105, 
+    103, 104, 116,  62,  32, 108, 
+    105, 103, 104, 116,  66, 117, 
+    102, 102, 101, 114,  32,  58, 
+     32, 114, 101, 103, 105, 115, 
+    116, 101, 114,  40, 116,  48, 
+     41,  59,  13,  10,  13,  10, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  13,  10,  47,  47, 
+     32,  84,  89,  80,  69,  68, 
+     69,  70,  83,  32,  47,  47, 
+     13,  10,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  13,  10, 
+    115, 116, 114, 117,  99, 116, 
+     32,  86, 101, 114, 116, 101, 
+    120,  73, 110, 112, 117, 116, 
+     84, 121, 112, 101,  13,  10, 
+    123,  13,  10,  32,  32,  32, 
+     32, 102, 108, 111,  97, 116, 
+     52,  32, 112, 111, 115, 105, 
+    116, 105, 111, 110,  32,  58, 
+     32,  80,  79,  83,  73,  84, 
+     73,  79,  78,  59,  13,  10, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  50,  32, 116, 
+    101, 120,  32,  58,  32,  84, 
+     69,  88,  67,  79,  79,  82, 
+     68,  48,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  51,  32, 110, 111, 
+    114, 109,  97, 108,  32,  58, 
+     32,  78,  79,  82,  77,  65, 
+     76,  59,  13,  10,  32,  32, 
+     32,  32, 117, 105, 110, 116, 
+     32, 107, 110, 111,  99, 104, 
+    101, 110,  32,  58,  32,  75, 
+     78,  79,  67,  72,  69,  78, 
+    198,  90,   0,   0, 117, 131, 
+      1,   0,  76, 232,   3,   0, 
+     81, 207,   1,   0, 146, 183, 
+      2,   0,  28,  19,   2,   0, 
+    194,  82,   1,   0,  43, 236, 
+      3,   0, 217,  42,   2,   0, 
+     38, 107,   0,   0, 103, 159, 
+      1,   0,  73,  20,   1,   0, 
+     19,  54,   2,   0,  65, 185, 
+      2,   0, 153, 189,   3,   0, 
+    214,   6,   3,   0, 125, 218, 
+      1,   0, 146, 230,   3,   0, 
+    202, 179,   0,   0, 231,  86, 
+      0,   0,  37, 255,   1,   0, 
+    115,  74,   1,   0, 117,  14, 
+      0,   0,  80, 185,   1,   0, 
+      0,  16,   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,   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,   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,   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,   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,   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,   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,   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,   0,   0,   0,   0, 
+      0,   0,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  13,  10,  47, 
+     47,  32,  71,  76,  79,  66, 
+     65,  76,  83,  32,  47,  47, 
+     13,  10,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  13,  10,  99, 
+     98, 117, 102, 102, 101, 114, 
+     32,  77,  97, 116, 114, 105, 
+    120,  66, 117, 102, 102, 101, 
+    114,  32,  58,  32, 114, 101, 
+    103, 105, 115, 116, 101, 114, 
+     40,  98,  48,  41,  13,  10, 
+    123,  13,  10,  32,  32,  32, 
+     32, 109,  97, 116, 114, 105, 
+    120,  32, 107, 110, 111,  99, 
+    104, 101, 110,  77,  97, 116, 
+    114, 105, 120,  91,  49,  50, 
+     56,  93,  59,  13,  10, 125, 
+     59,  13,  10,  13,  10,  47, 
+     47,  32,  84, 104, 101,  32, 
+    112, 114, 111, 106, 101,  99, 
+    116, 105, 111, 110,  32,  97, 
+    110, 100,  32, 118, 105, 101, 
+    119,  32, 109,  97, 116, 114, 
+    105, 120,  13,  10,  99,  98, 
+    117, 102, 102, 101, 114,  32, 
+     75,  97, 109, 101, 114,  97, 
+     32,  58,  32, 114, 101, 103, 
+    105, 115, 116, 101, 114,  40, 
+     98,  49,  41,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32, 118, 105, 101, 119,  59, 
+     13,  10,  32,  32,  32,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32, 112, 114, 111, 106, 101, 
+     99, 116, 105, 111, 110,  59, 
+     13,  10, 125,  13,  10,  13, 
+     10,  99,  98, 117, 102, 102, 
+    101, 114,  32,  76, 105, 103, 
+    104, 116,  67, 111, 110, 116, 
+    114, 111, 108, 108, 101, 114, 
+     32,  58,  32, 114, 101, 103, 
+    105, 115, 116, 101, 114,  40, 
+     98,  50,  41,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    117, 105, 110, 116,  32, 108, 
+    105, 103, 104, 116,  76, 101, 
+    110, 103, 116, 104,  59,  13, 
+     10,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  32, 100, 
+     97, 121,  76, 105, 103, 104, 
+    116,  70,  97,  99, 116, 111, 
+    114,  59,  13,  10, 125,  13, 
+     10,  13,  10,  47,  47,  32, 
+    115, 116, 111, 114, 101, 115, 
+     32, 116, 104, 101,  32, 108, 
+    105, 103, 104, 116,  32, 102, 
+    111, 114,  32, 116, 119, 111, 
+     32, 118, 101, 114, 116, 105, 
+     99, 105, 101, 115,  13,  10, 
+    115, 116, 114, 117,  99, 116, 
+     32,  86, 101, 114, 116, 101, 
+    120,  76, 105, 103, 104, 116, 
+     13,  10, 123,  13,  10,  32, 
+     32,  32,  32, 117, 105, 110, 
+    116,  32, 100,  97, 121,  76, 
+    105, 103, 104, 116,  49,  59, 
+     13,  10,  32,  32,  32,  32, 
+    117, 105, 110, 116,  32, 100, 
+    121, 110,  97, 109, 105,  99, 
+     76, 105, 103, 104, 116,  49, 
+     59,  13,  10,  32,  32,  32, 
+     32, 117, 105, 110, 116,  32, 
+    100,  97, 121,  76, 105, 103, 
+    104, 116,  50,  59,  13,  10, 
+     32,  32,  32,  32, 117, 105, 
+    110, 116,  32, 100, 121, 110, 
+     97, 109, 105,  99,  76, 105, 
+    103, 104, 116,  50,  59,  13, 
+     10, 125,  59,  13,  10,  13, 
+     10,  83, 116, 114, 117,  99, 
+    116, 117, 114, 101, 100,  66, 
+    117, 102, 102, 101, 114,  60, 
+     86, 101, 114, 116, 101, 120, 
+     76, 105, 103, 104, 116,  62, 
+     32, 108, 105, 103, 104, 116, 
+     66, 117, 102, 102, 101, 114, 
+     32,  58,  32, 114, 101, 103, 
+    105, 115, 116, 101, 114,  40, 
+    116,  48,  41,  59,  13,  10, 
+     13,  10,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  13,  10, 
+     47,  47,  32,  84,  89,  80, 
+     69,  68,  69,  70,  83,  32, 
+     47,  47,  13,  10,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     13,  10, 115, 116, 114, 117, 
+     99, 116,  32,  86, 101, 114, 
+    116, 101, 120,  73, 110, 112, 
+    117, 116,  84, 121, 112, 101, 
+     13,  10, 123,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  52,  32, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     32,  58,  32,  80,  79,  83, 
+     73,  84,  73,  79,  78,  59, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  50, 
+     32, 116, 101, 120,  32,  58, 
+     32,  84,  69,  88,  67,  79, 
+     79,  82,  68,  48,  59,  13, 
+     10,  32,  32,  32,  32, 102, 
+    108, 111,  97, 116,  51,  32, 
+    110, 111, 114, 109,  97, 108, 
+     32,  58,  32,  78,  79,  82, 
+     77,  65,  76,  59,  13,  10, 
+     32,  32,  32,  32, 117, 105, 
+    110, 116,  32, 107, 110, 111, 
+     99, 104, 101, 110,  32,  58, 
+     32,  75,  78,  79,  67,  72, 
+     69,  78,  95,  73,  68,  48, 
+     59,  13,  10,  32,  32,  32, 
+     32, 117, 105, 110, 116,  32, 
+    105, 100,  32,  58,  32,  86, 
+     69,  82,  84,  69,  88,  95, 
+     73,  68,  48,  59,  13,  10, 
+    125,  59,  13,  10,  13,  10, 
+    115, 116, 114, 117,  99, 116, 
+     32,  80, 105, 120, 101, 108, 
+     73, 110, 112, 117, 116,  84, 
+    121, 112, 101,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  52, 
+     32, 119, 111, 114, 108, 100, 
+     80, 111, 115,  32,  58,  32, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  52,  32, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     32,  58,  32,  83,  86,  95, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  50,  32, 116, 101, 
+    120,  32,  58,  32,  84,  69, 
+     88,  67,  79,  79,  82,  68, 
+     48,  59,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  51,  32, 110, 111, 114, 
+    109,  97, 108,  32,  58,  32, 
+     84,  69,  88,  67,  79,  79, 
+     82,  68,  49,  59,  13,  10, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  52,  32, 108, 
+    105, 103, 104, 116,  32,  58, 
+     32,  84,  69,  88,  67,  79, 
+     79,  82,  68,  50,  59,  13, 
+     10, 125,  59,  13,  10,  13, 
+     10,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  13,  10,  47, 
+     47,  32,  86, 101, 114, 116, 
+    101, 120,  32,  83, 104,  97, 
+    100, 101, 114,  13,  10,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  13,  10,  80, 105, 120, 
+    101, 108,  73, 110, 112, 117, 
+    116,  84, 121, 112, 101,  32, 
+     84, 101, 120, 116, 117, 114, 
+    101,  86, 101, 114, 116, 101, 
+    120,  83, 104,  97, 100, 101, 
+    114,  40,  86, 101, 114, 116, 
+    101, 120,  73, 110, 112, 117, 
+    116,  84, 121, 112, 101,  32, 
+    105, 110, 112, 117, 116,  41, 
+     13,  10, 123,  13,  10,  32, 
+     32,  32,  32,  47,  47,  32, 
+    114, 101, 116, 117, 114, 110, 
+     32, 105, 110, 112, 117, 116, 
+     59,  13,  10,  32,  32,  32, 
+     32,  80, 105, 120, 101, 108, 
+     73, 110, 112, 117, 116,  84, 
+    121, 112, 101,  32, 111, 117, 
+    116, 112, 117, 116,  59,  13, 
+     10,  32,  32,  32,  32, 111, 
+    117, 116, 112, 117, 116,  46, 
+    110, 111, 114, 109,  97, 108, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32,  61,  32, 
+    110, 111, 114, 109,  97, 108, 
+    105, 122, 101,  40, 109, 117, 
+    108,  40, 105, 110, 112, 117, 
+    116,  46, 110, 111, 114, 109, 
+     97, 108,  44,  32,  40, 102, 
+    108, 111,  97, 116,  51, 120, 
+     51,  41, 107, 110, 111,  99, 
+    104, 101, 110,  77,  97, 116, 
+    114, 105, 120,  91, 105, 110, 
+    112, 117, 116,  46, 107, 110, 
+    111,  99, 104, 101, 110,  93, 
+     41,  41,  59,  13,  10,  13, 
+     10,  32,  32,  32,  32,  47, 
+     47,  32,  67, 104,  97, 110, 
+    103, 101,  32, 116, 104, 101, 
+     32, 112, 111, 115, 105, 116, 
+    105, 111, 110,  32, 118, 101, 
+     99, 116, 111, 114,  32, 116, 
+    111,  32,  98, 101,  32,  52, 
+     32, 117, 110, 105, 116, 115, 
+     32, 102, 111, 114,  32, 112, 
+    114, 111, 112, 101, 114,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32,  99,  97, 108,  99, 117, 
+    108,  97, 116, 105, 111, 110, 
+    115,  46,  13,  10,  32,  32, 
+     32,  32, 105, 110, 112, 117, 
+    116,  46, 112, 111, 115, 105, 
+    116, 105, 111, 110,  46, 119, 
+     32,  61,  32,  49,  46,  48, 
+    102,  59,  13,  10,  13,  10, 
+     32,  32,  32,  32,  47,  47, 
+     32,  83, 116, 111, 114, 101, 
+     32, 116, 104, 101,  32, 116, 
+    101, 120, 116, 117, 114, 101, 
+     32,  99, 111, 111, 114, 100, 
+    105, 110,  97, 116, 101, 115, 
+     32, 102, 111, 114,  32, 116, 
+    104, 101,  32, 112, 105, 120, 
+    101, 108,  32, 115, 104,  97, 
+    100, 101, 114,  46,  13,  10, 
+     32,  32,  32,  32, 111, 117, 
+    116, 112, 117, 116,  46, 116, 
+    101, 120,  32,  61,  32, 105, 
+    110, 112, 117, 116,  46, 116, 
+    101, 120,  59,  13,  10,  13, 
+     10,  32,  32,  32,  32,  47, 
+     47,  32,  67,  97, 108,  99, 
+    117, 108,  97, 116, 101,  32, 
+    116, 104, 101,  32, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     32, 111, 102,  32, 116, 104, 
+    101,  32, 118, 101, 114, 116, 
+    101, 120,  32,  97, 103,  97, 
+    105, 110, 115, 116,  32, 116, 
+    104, 101,  32, 119, 111, 114, 
+    108, 100,  44,  32, 118, 105, 
+    101, 119,  44,  32,  97, 110, 
+    100,  13,  10,  32,  32,  32, 
+     32,  47,  47,  32, 112, 114, 
+    111, 106, 101,  99, 116, 105, 
+    111, 110,  32, 109,  97, 116, 
+    114, 105,  99, 101, 115,  46, 
+     13,  10,  32,  32,  32,  32, 
+    111, 117, 116, 112, 117, 116, 
+     46, 119, 111, 114, 108, 100, 
+     80, 111, 115,  32,  61,  32, 
+    109, 117, 108,  40, 105, 110, 
+    112, 117, 116,  46, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     44,  32, 107, 110, 111,  99, 
+    104, 101, 110,  77,  97, 116, 
+    114, 105, 120,  91, 105, 110, 
+    112, 117, 116,  46, 107, 110, 
+    111,  99, 104, 101, 110,  93, 
+     41,  59,  13,  10,  32,  32, 
+     32,  32, 111, 117, 116, 112, 
+    117, 116,  46, 112, 111, 115, 
+    105, 116, 105, 111, 110,  32, 
+     61,  32, 109, 117, 108,  40, 
+    111, 117, 116, 112, 117, 116, 
+     46, 119, 111, 114, 108, 100, 
+     80, 111, 115,  44,  32, 118, 
+    105, 101, 119,  41,  59,  13, 
+     10,  32,  32,  32,  32, 111, 
+    117, 116, 112, 117, 116,  46, 
+    112, 111, 115, 105, 116, 105, 
+    111, 110,  32,  61,  32, 109, 
+    117, 108,  40, 111, 117, 116, 
+    112, 117, 116,  46, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     44,  32, 112, 114, 111, 106, 
+    101,  99, 116, 105, 111, 110, 
+     41,  59,  13,  10,  32,  32, 
+     32,  32, 111, 117, 116, 112, 
+    117, 116,  46, 108, 105, 103, 
+    104, 116,  32,  61,  32, 102, 
+    108, 111,  97, 116,  52,  40, 
+     49,  46,  48, 102,  44,  32, 
+     49,  46,  48, 102,  44,  32, 
+     49,  46,  48, 102,  44,  32, 
+     48,  46, 102,  41,  59,  13, 
+     10,  32,  32,  32,  32, 117, 
+    105, 110, 116,  32, 100,  97, 
+    121,  76, 105, 103, 104, 116, 
+     59,  13,  10,  32,  32,  32, 
+     32, 117, 105, 110, 116,  32, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     59,  13,  10,  32,  32,  32, 
+     32, 105, 102,  32,  40, 108, 
+    105, 103, 104, 116,  76, 101, 
+    110, 103, 116, 104,  32,  61, 
+     61,  32,  49,  41,  13,  10, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 100,  97, 121, 
+     76, 105, 103, 104, 116,  32, 
+     61,  32, 108, 105, 103, 104, 
+    116,  66, 117, 102, 102, 101, 
+    114,  91,  48,  93,  46, 100, 
+     97, 121,  76, 105, 103, 104, 
+    116,  49,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 100, 121, 110,  97, 109, 
+    105,  99,  76, 105, 103, 104, 
+    116,  32,  61,  32, 108, 105, 
+    103, 104, 116,  66, 117, 102, 
+    102, 101, 114,  91,  48,  93, 
+     46, 100, 121, 110,  97, 109, 
+    105,  99,  76, 105, 103, 104, 
+    116,  49,  59,  13,  10,  32, 
+     32,  32,  32, 125,  13,  10, 
+     32,  32,  32,  32, 101, 108, 
+    115, 101,  32, 105, 102,  32, 
+     40, 105, 110, 112, 117, 116, 
+     46, 105, 100,  32,  60,  32, 
+    108, 105, 103, 104, 116,  76, 
+    101, 110, 103, 116, 104,  41, 
+     13,  10,  32,  32,  32,  32, 
+    123,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32, 105, 
+    102,  32,  40, 105, 110, 112, 
+    117, 116,  46, 105, 100,  32, 
+     37,  32,  50,  32,  61,  61, 
+     32,  48,  41,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 123,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32, 100,  97, 
+    121,  76, 105, 103, 104, 116, 
+     32,  61,  32, 108, 105, 103, 
+    104, 116,  66, 117, 102, 102, 
+    101, 114,  91, 105, 110, 112, 
+    117, 116,  46, 105, 100,  32, 
+     47,  32,  50,  93,  46, 100, 
+     97, 121,  76, 105, 103, 104, 
+    116,  49,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32, 100, 
+    121, 110,  97, 109, 105,  99, 
+     76, 105, 103, 104, 116,  32, 
+     61,  32, 108, 105, 103, 104, 
+    116,  66, 117, 102, 102, 101, 
+    114,  91, 105, 110, 112, 117, 
+    116,  46, 105, 100,  32,  47, 
+     32,  50,  93,  46, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  49,  59, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 125,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 101, 108, 115, 
+    101,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32, 123, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32, 100,  97, 121,  76, 
+    105, 103, 104, 116,  32,  61, 
+     32, 108, 105, 103, 104, 116, 
+     66, 117, 102, 102, 101, 114, 
+     91, 105, 110, 112, 117, 116, 
+     46, 105, 100,  32,  47,  32, 
+     50,  93,  46, 100,  97, 121, 
+     76, 105, 103, 104, 116,  50, 
+     59,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32, 100, 121, 110, 
+     97, 109, 105,  99,  76, 105, 
+    103, 104, 116,  32,  61,  32, 
+    108, 105, 103, 104, 116,  66, 
+    117, 102, 102, 101, 114,  91, 
+    105, 110, 112, 117, 116,  46, 
+    105, 100,  32,  47,  32,  50, 
+     93,  46, 100, 121, 110,  97, 
+    109, 105,  99,  76, 105, 103, 
+    104, 116,  50,  59,  13,  10, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32, 125,  13,  10,  32, 
+     32,  32,  32, 125,  13,  10, 
+     32,  32,  32,  32, 105, 102, 
+     32,  40, 108, 105, 103, 104, 
+    116,  76, 101, 110, 103, 116, 
+    104,  32,  62,  32,  48,  41, 
+     13,  10,  32,  32,  32,  32, 
+    123,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32, 111, 
+    117, 116, 112, 117, 116,  46, 
+    108, 105, 103, 104, 116,  46, 
+    120,  32,  61,  32,  40,  40, 
+     40, 100,  97, 121,  76, 105, 
+    103, 104, 116,  32,  62,  62, 
+     32,  50,  52,  41,  32,  38, 
+     32,  48, 120,  70,  70,  41, 
+     32,  47,  32,  50,  53,  53, 
+     46, 102,  41,  32,  42,  32, 
+    100,  97, 121,  76, 105, 103, 
+    104, 116,  70,  97,  99, 116, 
+    111, 114,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 108, 105, 103, 104, 
+    116,  46, 121,  32,  61,  32, 
+     40,  40,  40, 100,  97, 121, 
+     76, 105, 103, 104, 116,  32, 
+     62,  62,  32,  49,  54,  41, 
+     32,  38,  32,  48, 120,  70, 
+     70,  41,  32,  47,  32,  50, 
+     53,  53,  46, 102,  41,  32, 
+     42,  32, 100,  97, 121,  76, 
+    105, 103, 104, 116,  70,  97, 
+     99, 116, 111, 114,  59,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 111, 117, 116, 
+    112, 117, 116,  46, 108, 105, 
+    103, 104, 116,  46, 122,  32, 
+     61,  32,  40,  40,  40, 100, 
+     97, 121,  76, 105, 103, 104, 
+    116,  32,  62,  62,  32,  56, 
+     41,  32,  38,  32,  48, 120, 
+     70,  70,  41,  32,  47,  32, 
+     50,  53,  53,  46, 102,  41, 
+     32,  42,  32, 100,  97, 121, 
+     76, 105, 103, 104, 116,  70, 
+     97,  99, 116, 111, 114,  59, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  51,  32, 100, 
+    121, 110,  97, 109, 105,  99, 
+     76, 105, 103, 104, 116,  82, 
+    101, 115, 117, 108, 116,  59, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  82, 101, 
+    115, 117, 108, 116,  46, 120, 
+     32,  61,  32,  40,  40, 100, 
+    121, 110,  97, 109, 105,  99, 
+     76, 105, 103, 104, 116,  32, 
+     62,  62,  32,  50,  52,  41, 
+     32,  38,  32,  48, 120,  70, 
+     70,  41,  32,  47,  32,  50, 
+     53,  53,  46, 102,  59,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 100, 121, 110, 
+     97, 109, 105,  99,  76, 105, 
+    103, 104, 116,  82, 101, 115, 
+    117, 108, 116,  46, 121,  32, 
+     61,  32,  40,  40, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  32,  62, 
+     62,  32,  49,  54,  41,  32, 
+     38,  32,  48, 120,  70,  70, 
+     41,  32,  47,  32,  50,  53, 
+     53,  46, 102,  59,  13,  10, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32, 100, 121, 110,  97, 
+    109, 105,  99,  76, 105, 103, 
+    104, 116,  82, 101, 115, 117, 
+    108, 116,  46, 122,  32,  61, 
+     32,  40,  40, 100, 121, 110, 
+     97, 109, 105,  99,  76, 105, 
+    103, 104, 116,  32,  62,  62, 
+     32,  56,  41,  32,  38,  32, 
+     48, 120,  70,  70,  41,  32, 
+     47,  32,  50,  53,  53,  46, 
+    102,  59,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    105, 102,  32,  40, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  82, 101, 
+    115, 117, 108, 116,  46, 120, 
+     32,  62,  32, 111, 117, 116, 
+    112, 117, 116,  46, 108, 105, 
+    103, 104, 116,  46, 120,  41, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 108, 105, 103, 104, 
+    116,  46, 120,  32,  61,  32, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     82, 101, 115, 117, 108, 116, 
+     46, 120,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 125,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    105, 102,  32,  40, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  82, 101, 
+    115, 117, 108, 116,  46, 121, 
+     32,  62,  32, 111, 117, 116, 
+    112, 117, 116,  46, 108, 105, 
+    103, 104, 116,  46, 121,  41, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 108, 105, 103, 104, 
+    116,  46, 121,  32,  61,  32, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     82, 101, 115, 117, 108, 116, 
+     46, 121,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 125,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    105, 102,  32,  40, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  82, 101, 
+    115, 117, 108, 116,  46, 122, 
+     32,  62,  32, 111, 117, 116, 
+    112, 117, 116,  46, 108, 105, 
+    103, 104, 116,  46, 122,  41, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 108, 105, 103, 104, 
+    116,  46, 122,  32,  61,  32, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     82, 101, 115, 117, 108, 116, 
+     46, 122,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 125,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    111, 117, 116, 112, 117, 116, 
+     46, 108, 105, 103, 104, 116, 
+     46, 119,  32,  61,  32,  49, 
+     46, 102,  59,  13,  10,  32, 
+     32,  32,  32, 125,  13,  10, 
+     13,  10,  32,  32,  32,  32, 
+    114, 101, 116, 117, 114, 110, 
+     32, 111, 117, 116, 112, 117, 
+    116,  59,  13,  10, 125,   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,   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,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 254, 239, 
+    254, 239,   1,   0,   0,   0, 
+    144,  14,   0,   0,   0,  67, 
+     58,  92,  85, 115, 101, 114, 
+    115,  92, 107, 111, 108, 106, 
+     97,  92,  68, 101, 115, 107, 
+    116, 111, 112,  92,  75, 111, 
+    108, 106,  97,  45,  83, 116, 
+    114, 111, 104, 109,  45,  71, 
+     97, 109, 101, 115,  92,  83, 
+    112, 105, 101, 108, 101,  32, 
+     80, 108,  97, 116, 102, 111, 
+    114, 109,  92,  83, 116,  97, 
+    110, 100,  97, 108, 111, 119, 
+    110,  92,  75, 108, 105, 101, 
+    110, 116,  92,  70,  97,  99, 
+    116, 111, 114, 121,  67, 114, 
+     97, 102, 116,  92,  70,  97, 
+     99, 116, 111, 114, 121,  67, 
+    114,  97, 102, 116,  92,  68, 
+     88,  49,  49,  67, 117, 115, 
+    116, 111, 109,  86, 101, 114, 
+    116, 101, 120,  83, 104,  97, 
+    100, 101, 114,  46, 104, 108, 
+    115, 108,   0,   0,  99,  58, 
+     92, 117, 115, 101, 114, 115, 
+     92, 107, 111, 108, 106,  97, 
+     92, 100, 101, 115, 107, 116, 
+    111, 112,  92, 107, 111, 108, 
+    106,  97,  45, 115, 116, 114, 
+    111, 104, 109,  45, 103,  97, 
+    109, 101, 115,  92, 115, 112, 
+    105, 101, 108, 101,  32, 112, 
+    108,  97, 116, 102, 111, 114, 
+    109,  92, 115, 116,  97, 110, 
+    100,  97, 108, 111, 119, 110, 
+     92, 107, 108, 105, 101, 110, 
+    116,  92, 102,  97,  99, 116, 
+    111, 114, 121,  99, 114,  97, 
+    102, 116,  92, 102,  97,  99, 
+    116, 111, 114, 121,  99, 114, 
+     97, 102, 116,  92, 100, 120, 
+     49,  49,  99, 117, 115, 116, 
+    111, 109, 118, 101, 114, 116, 
+    101, 120, 115, 104,  97, 100, 
+    101, 114,  46, 104, 108, 115, 
+    108,   0,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  13,  10,  47, 
+     47,  32,  71,  76,  79,  66, 
+     65,  76,  83,  32,  47,  47, 
+     13,  10,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  13,  10,  99, 
+     98, 117, 102, 102, 101, 114, 
+     32,  77,  97, 116, 114, 105, 
+    120,  66, 117, 102, 102, 101, 
+    114,  32,  58,  32, 114, 101, 
+    103, 105, 115, 116, 101, 114, 
+     40,  98,  48,  41,  13,  10, 
+    123,  13,  10,  32,  32,  32, 
+     32, 109,  97, 116, 114, 105, 
+    120,  32, 107, 110, 111,  99, 
+    104, 101, 110,  77,  97, 116, 
+    114, 105, 120,  91,  49,  50, 
+     56,  93,  59,  13,  10, 125, 
+     59,  13,  10,  13,  10,  47, 
+     47,  32,  84, 104, 101,  32, 
+    112, 114, 111, 106, 101,  99, 
+    116, 105, 111, 110,  32,  97, 
+    110, 100,  32, 118, 105, 101, 
+    119,  32, 109,  97, 116, 114, 
+    105, 120,  13,  10,  99,  98, 
+    117, 102, 102, 101, 114,  32, 
+     75,  97, 109, 101, 114,  97, 
+     32,  58,  32, 114, 101, 103, 
+    105, 115, 116, 101, 114,  40, 
+     98,  49,  41,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32, 118, 105, 101, 119,  59, 
+     13,  10,  32,  32,  32,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32, 112, 114, 111, 106, 101, 
+     99, 116, 105, 111, 110,  59, 
+     13,  10, 125,  13,  10,  13, 
+     27, 226,  48,   1, 128,   0, 
+      0,   0,  69,  63, 116, 244, 
+     99,  69, 217,   1,   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,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   2,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+    132,   0,   0,   0,  40,   0, 
+      0,   0,  27, 226,  48,   1, 
+    206,  84,  27, 251, 137,  13, 
+      0,   0,   1,   0,   0,   0, 
+    131,   0,   0,   0, 132,   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,   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,   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,   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,   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,   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,   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,   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,   4,   0,   0,   0, 
+     66,   0,  60,  17,  16,   1, 
+      0,   0,   0,   1,  10,   0, 
+      1,   0, 173,   2,  97,  74, 
+     10,   0,   1,   0, 173,   2, 
+     97,  74,  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,  49,  48,  46,  49,   0, 
+      0,   0,  66,   0,  61,  17, 
+      1, 104, 108, 115, 108,  70, 
+    108,  97, 103, 115,   0,  48, 
+    120,  53,   0, 104, 108, 115, 
+    108,  84,  97, 114, 103, 101, 
+    116,   0, 118, 115,  95,  53, 
+     95,  48,   0, 104, 108, 115, 
+    108,  69, 110, 116, 114, 121, 
+      0,  84, 101, 120, 116, 117, 
+    114, 101,  86, 101, 114, 116, 
+    101, 120,  83, 104,  97, 100, 
+    101, 114,   0,   0,  58,   0, 
+     16,  17,   0,   0,   0,   0, 
+    108,   7,   0,   0,   0,   0, 
+      0,   0, 100,  10,   0,   0, 
+      0,   0,   0,   0, 100,  10, 
+      0,   0,   9,  16,   0,   0, 
+    208,   0,   0,   0,   1,   0, 
+    160,  84, 101, 120, 116, 117, 
+    114, 101,  86, 101, 114, 116, 
+    101, 120,  83, 104,  97, 100, 
+    101, 114,   0,   0,  46,   0, 
+     62,  17,   4,  16,   0,   0, 
+      9,   0, 105, 110, 112, 117, 
+    116,   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,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+      0,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+      0,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+      4,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+      4,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+      8,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+      8,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     12,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+     12,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     16,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+     16,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     20,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+     20,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     24,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+     32,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     28,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+     36,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     32,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+     40,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     36,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+     48,   0,   0,   0,  22,   0, 
+     80,  17,   1,   0,   5,   0, 
+     40,   0,   4,   0, 208,   0, 
+      0,   0,   1,   0, 100,  10, 
+     64,   0,   0,   0,  22,   0, 
+     80,  17,   0,   0,   5,   0, 
+     12,   0,   4,   0, 196,   1, 
+      0,   0,   1,   0, 100,   1, 
+     28,   0,   0,   0,  22,   0, 
+     80,  17,   0,   0,   5,   0, 
+     40,   0,   4,   0, 204,   4, 
+      0,   0,   1,   0, 152,   1, 
+     12,   0,   0,   0,  74,   0, 
+     62,  17,   8,  16,   0,   0, 
+    136,   0,  60,  84, 101, 120, 
+    116, 117, 114, 101,  86, 101, 
+    114, 116, 101, 120,  83, 104, 
+     97, 100, 101, 114,  32, 114, 
+    101, 116, 117, 114, 110,  32, 
+    118,  97, 108, 117, 101,  62, 
+      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,  22,   0,  80,  17, 
+      2,   0,   5,   0,  52,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  64,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  56,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  68,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  60,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  72,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  64,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  76,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  40,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  48,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  44,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  52,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  48,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  56,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  32,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  32,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  36,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  36,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  16,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  16,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  20,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  20,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  24,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  24,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  28,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  28,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,   0,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,   0,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,   4,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,   4,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,   8,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,   8,   0, 
+      0,   0,  22,   0,  80,  17, 
+      2,   0,   5,   0,  12,   0, 
+      4,   0, 208,   0,   0,   0, 
+      1,   0, 100,  10,  12,   0, 
+      0,   0,  46,   0,  62,  17, 
+      7,  16,   0,   0,   8,   0, 
+    111, 117, 116, 112, 117, 116, 
+      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,  22,   0,  80,  17, 
+      0,   0,   5,   0,  40,   0, 
+      4,   0, 176,   1,   0,   0, 
+      1,   0, 132,   9,   0,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  44,   0, 
+      4,   0, 176,   1,   0,   0, 
+      1,   0, 132,   9,   4,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  48,   0, 
+      4,   0, 176,   1,   0,   0, 
+      1,   0, 132,   9,   8,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  32,   0, 
+      4,   0, 216,   1,   0,   0, 
+      1,   0,  92,   9,  32,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  36,   0, 
+      4,   0, 216,   1,   0,   0, 
+      1,   0,  92,   9,  36,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   0,   0, 
+      4,   0,  48,   2,   0,   0, 
+      1,   0,   4,   9,  48,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   4,   0, 
+      4,   0,  88,   2,   0,   0, 
+      1,   0, 220,   8,  52,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,   8,   0, 
+      4,   0, 128,   2,   0,   0, 
+      1,   0, 180,   8,  56,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  12,   0, 
+      4,   0, 168,   2,   0,   0, 
+      1,   0, 140,   8,  60,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  16,   0, 
+      4,   0, 200,   2,   0,   0, 
+      1,   0, 128,   0,  16,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  20,   0, 
+      4,   0, 232,   2,   0,   0, 
+      1,   0, 128,   0,  20,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  24,   0, 
+      4,   0,   8,   3,   0,   0, 
+      1,   0, 128,   0,  24,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  28,   0, 
+      4,   0,  40,   3,   0,   0, 
+      1,   0, 128,   0,  28,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  16,   0, 
+      4,   0,  72,   3,   0,   0, 
+      1,   0, 236,   7,  64,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  20,   0, 
+      4,   0, 104,   3,   0,   0, 
+      1,   0, 204,   7,  68,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  24,   0, 
+      4,   0, 136,   3,   0,   0, 
+      1,   0, 172,   7,  72,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  28,   0, 
+      4,   0, 168,   3,   0,   0, 
+      1,   0, 140,   7,  76,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  52,   0, 
+      4,   0, 200,   3,   0,   0, 
+      1,   0, 108,   7,  16,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  56,   0, 
+      4,   0, 200,   3,   0,   0, 
+      1,   0, 108,   7,  20,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  60,   0, 
+      4,   0, 200,   3,   0,   0, 
+      1,   0, 108,   7,  24,   0, 
+      0,   0,  22,   0,  80,  17, 
+      0,   0,   5,   0,  64,   0, 
+      4,   0, 200,   3,   0,   0, 
+      1,   0, 108,   7,  28,   0, 
+      0,   0,  46,   0,  62,  17, 
+    117,   0,   0,   0,   0,   0, 
+    100,  97, 121,  76, 105, 103, 
+    104, 116,   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,  34,   0,  80,  17, 
+      0,   0,   1,   0,   0,   0, 
+      4,   0,  72,   4,   0,   0, 
+      1,   0, 200,   5,  68,   0, 
+    224,   0, 136,   1,  96,   0, 
+     76,   2,   4,   0,  80,   0, 
+      0,   0,  50,   0,  62,  17, 
+    117,   0,   0,   0,   0,   0, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+      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, 
+     34,   0,  80,  17,   0,   0, 
+      1,   0,   0,   0,   4,   0, 
+    136,   4,   0,   0,   1,   0, 
+    172,   6,   4,   0,  64,   1, 
+     72,   1, 192,   0,  12,   2, 
+      4,   0,  84,   0,   0,   0, 
+     58,   0,  62,  17,   2,  16, 
+      0,   0,   8,   0, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  82, 101, 
+    115, 117, 108, 116,   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, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   0,   0,   4,   0, 
+    252,   8,   0,   0,   1,   0, 
+     84,   1,  12,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   4,   0,   4,   0, 
+    120,   9,   0,   0,   1,   0, 
+     84,   1,  40,   0,   0,   0, 
+     22,   0,  80,  17,   0,   0, 
+      5,   0,   8,   0,   4,   0, 
+    244,   9,   0,   0,   1,   0, 
+    216,   0,  44,   0,   0,   0, 
+      2,   0,   6,   0, 244,   0, 
+      0,   0,  24,   0,   0,   0, 
+      1,   0,   0,   0,  16,   1, 
+    241,  92,  83,  91, 117,  97, 
+    106, 208, 231, 181,  62, 184, 
+    221,  36,  86, 236,   0,   0, 
+    242,   0,   0,   0,  56,  10, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   1,   0,  52,  11, 
+      0,   0,   0,   0,   0,   0, 
+    216,   0,   0,   0,  44,  10, 
+      0,   0, 208,   0,   0,   0, 
+     61,   0,   0, 129, 208,   0, 
+      0,   0,  62,   0,   0,   0, 
+    240,   0,   0,   0,  61,   0, 
+      0, 129, 240,   0,   0,   0, 
+     62,   0,   0,   0,  20,   1, 
+      0,   0,  61,   0,   0, 129, 
+     20,   1,   0,   0,  62,   0, 
+      0,   0,  60,   1,   0,   0, 
+     61,   0,   0, 129,  60,   1, 
+      0,   0,  62,   0,   0,   0, 
+    100,   1,   0,   0,  61,   0, 
+      0, 129, 100,   1,   0,   0, 
+     62,   0,   0,   0, 128,   1, 
+      0,   0,  61,   0,   0, 129, 
+    128,   1,   0,   0,  62,   0, 
+      0,   0, 148,   1,   0,   0, 
+     61,   0,   0, 129, 148,   1, 
+      0,   0,  62,   0,   0,   0, 
+    176,   1,   0,   0,  65,   0, 
+      0, 128, 176,   1,   0,   0, 
+     65,   0,   0,   0, 196,   1, 
+      0,   0,  68,   0,   0, 128, 
+    196,   1,   0,   0,  68,   0, 
+      0,   0, 216,   1,   0,   0, 
+     72,   0,   0, 128, 216,   1, 
+      0,   0,  72,   0,   0,   0, 
+    248,   1,   0,   0,  72,   0, 
+      0, 128, 248,   1,   0,   0, 
+     72,   0,   0,   0,  12,   2, 
+      0,   0,  72,   0,   0, 128, 
+     12,   2,   0,   0,  72,   0, 
+      0,   0,  48,   2,   0,   0, 
+     72,   0,   0, 128,  48,   2, 
+      0,   0,  72,   0,   0,   0, 
+     88,   2,   0,   0,  72,   0, 
+      0, 128,  88,   2,   0,   0, 
+     72,   0,   0,   0, 128,   2, 
+      0,   0,  72,   0,   0, 128, 
+    128,   2,   0,   0,  72,   0, 
+      0,   0, 168,   2,   0,   0, 
+     73,   0,   0, 128, 168,   2, 
+      0,   0,  73,   0,   0,   0, 
+    200,   2,   0,   0,  73,   0, 
+      0, 128, 200,   2,   0,   0, 
+     73,   0,   0,   0, 232,   2, 
+      0,   0,  73,   0,   0, 128, 
+    232,   2,   0,   0,  73,   0, 
+      0,   0,   8,   3,   0,   0, 
+     73,   0,   0, 128,   8,   3, 
+      0,   0,  73,   0,   0,   0, 
+     40,   3,   0,   0,  74,   0, 
+      0, 128,  40,   3,   0,   0, 
+     74,   0,   0,   0,  72,   3, 
+      0,   0,  74,   0,   0, 128, 
+     72,   3,   0,   0,  74,   0, 
+      0,   0, 104,   3,   0,   0, 
+     74,   0,   0, 128, 104,   3, 
+      0,   0,  74,   0,   0,   0, 
+    136,   3,   0,   0,  74,   0, 
+      0, 128, 136,   3,   0,   0, 
+     74,   0,   0,   0, 168,   3, 
+      0,   0,  75,   0,   0, 128, 
+    168,   3,   0,   0,  75,   0, 
+      0,   0, 200,   3,   0,   0, 
+     78,   0,   0, 128, 200,   3, 
+      0,   0,  78,   0,   0,   0, 
+    220,   3,   0,   0,  78,   0, 
+      0, 128, 220,   3,   0,   0, 
+     78,   0,   0,   0, 252,   3, 
+      0,   0,  78,   0,   0, 128, 
+    252,   3,   0,   0,  78,   0, 
+      0,   0,   8,   4,   0,   0, 
+     80,   0,   0, 128,   8,   4, 
+      0,   0,  80,   0,   0,   0, 
+     28,   4,   0,   0,  80,   0, 
+      0, 128,  28,   4,   0,   0, 
+     80,   0,   0,   0,  72,   4, 
+      0,   0,  81,   0,   0, 128, 
+     72,   4,   0,   0,  81,   0, 
+      0,   0,  92,   4,   0,   0, 
+     81,   0,   0, 128,  92,   4, 
+      0,   0,  81,   0,   0,   0, 
+    136,   4,   0,   0,  82,   0, 
+      0, 128, 136,   4,   0,   0, 
+     82,   0,   0,   0, 140,   4, 
+      0,   0,  83,   0,   0, 128, 
+    140,   4,   0,   0,  83,   0, 
+      0,   0, 172,   4,   0,   0, 
+     83,   0,   0, 128, 172,   4, 
+      0,   0,  83,   0,   0,   0, 
+    184,   4,   0,   0,  83,   0, 
+      0, 128, 184,   4,   0,   0, 
+     83,   0,   0,   0, 204,   4, 
+      0,   0,  85,   0,   0, 128, 
+    204,   4,   0,   0,  85,   0, 
+      0,   0, 224,   4,   0,   0, 
+     85,   0,   0, 128, 224,   4, 
+      0,   0,  85,   0,   0,   0, 
+      0,   5,   0,   0,  85,   0, 
+      0, 128,   0,   5,   0,   0, 
+     85,   0,   0,   0,  12,   5, 
+      0,   0,  87,   0,   0, 128, 
+     12,   5,   0,   0,  87,   0, 
+      0,   0,  32,   5,   0,   0, 
+     87,   0,   0, 128,  32,   5, 
+      0,   0,  87,   0,   0,   0, 
+     64,   5,   0,   0,  87,   0, 
+      0, 128,  64,   5,   0,   0, 
+     87,   0,   0,   0, 108,   5, 
+      0,   0,  88,   0,   0, 128, 
+    108,   5,   0,   0,  88,   0, 
+      0,   0, 128,   5,   0,   0, 
+     88,   0,   0, 128, 128,   5, 
+      0,   0,  88,   0,   0,   0, 
+    160,   5,   0,   0,  88,   0, 
+      0, 128, 160,   5,   0,   0, 
+     88,   0,   0,   0, 204,   5, 
+      0,   0,  89,   0,   0, 128, 
+    204,   5,   0,   0,  89,   0, 
+      0,   0, 208,   5,   0,   0, 
+     92,   0,   0, 128, 208,   5, 
+      0,   0,  92,   0,   0,   0, 
+    228,   5,   0,   0,  92,   0, 
+      0, 128, 228,   5,   0,   0, 
+     92,   0,   0,   0,   4,   6, 
+      0,   0,  92,   0,   0, 128, 
+      4,   6,   0,   0,  92,   0, 
+      0,   0,  48,   6,   0,   0, 
+     93,   0,   0, 128,  48,   6, 
+      0,   0,  93,   0,   0,   0, 
+     68,   6,   0,   0,  93,   0, 
+      0, 128,  68,   6,   0,   0, 
+     93,   0,   0,   0, 100,   6, 
+      0,   0,  93,   0,   0, 128, 
+    100,   6,   0,   0,  93,   0, 
+      0,   0, 144,   6,   0,   0, 
+     94,   0,   0, 128, 144,   6, 
+      0,   0,  94,   0,   0,   0, 
+    148,   6,   0,   0,  95,   0, 
+      0, 128, 148,   6,   0,   0, 
+     95,   0,   0,   0, 152,   6, 
+      0,   0,  95,   0,   0, 128, 
+    152,   6,   0,   0,  95,   0, 
+      0,   0, 156,   6,   0,   0, 
+     96,   0,   0, 128, 156,   6, 
+      0,   0,  96,   0,   0,   0, 
+    172,   6,   0,   0,  98,   0, 
+      0, 128, 172,   6,   0,   0, 
+     98,   0,   0,   0, 192,   6, 
+      0,   0,  98,   0,   0, 128, 
+    192,   6,   0,   0,  98,   0, 
+      0,   0, 220,   6,   0,   0, 
+     98,   0,   0, 128, 220,   6, 
+      0,   0,  98,   0,   0,   0, 
+    248,   6,   0,   0,  98,   0, 
+      0, 128, 248,   6,   0,   0, 
+     98,   0,   0,   0,  12,   7, 
+      0,   0,  98,   0,   0, 128, 
+     12,   7,   0,   0,  98,   0, 
+      0,   0,  40,   7,   0,   0, 
+     98,   0,   0, 128,  40,   7, 
+      0,   0,  98,   0,   0,   0, 
+     72,   7,   0,   0,  99,   0, 
+      0, 128,  72,   7,   0,   0, 
+     99,   0,   0,   0,  92,   7, 
+      0,   0,  99,   0,   0, 128, 
+     92,   7,   0,   0,  99,   0, 
+      0,   0, 120,   7,   0,   0, 
+     99,   0,   0, 128, 120,   7, 
+      0,   0,  99,   0,   0,   0, 
+    148,   7,   0,   0,  99,   0, 
+      0, 128, 148,   7,   0,   0, 
+     99,   0,   0,   0, 168,   7, 
+      0,   0,  99,   0,   0, 128, 
+    168,   7,   0,   0,  99,   0, 
+      0,   0, 196,   7,   0,   0, 
+     99,   0,   0, 128, 196,   7, 
+      0,   0,  99,   0,   0,   0, 
+    228,   7,   0,   0, 100,   0, 
+      0, 128, 228,   7,   0,   0, 
+    100,   0,   0,   0, 248,   7, 
+      0,   0, 100,   0,   0, 128, 
+    248,   7,   0,   0, 100,   0, 
+      0,   0,  20,   8,   0,   0, 
+    100,   0,   0, 128,  20,   8, 
+      0,   0, 100,   0,   0,   0, 
+     48,   8,   0,   0, 100,   0, 
+      0, 128,  48,   8,   0,   0, 
+    100,   0,   0,   0,  68,   8, 
+      0,   0, 100,   0,   0, 128, 
+     68,   8,   0,   0, 100,   0, 
+      0,   0,  96,   8,   0,   0, 
+    100,   0,   0, 128,  96,   8, 
+      0,   0, 100,   0,   0,   0, 
+    128,   8,   0,   0, 102,   0, 
+      0, 128, 128,   8,   0,   0, 
+    102,   0,   0,   0, 148,   8, 
+      0,   0, 102,   0,   0, 128, 
+    148,   8,   0,   0, 102,   0, 
+      0,   0, 176,   8,   0,   0, 
+    102,   0,   0, 128, 176,   8, 
+      0,   0, 102,   0,   0,   0, 
+    204,   8,   0,   0, 102,   0, 
+      0, 128, 204,   8,   0,   0, 
+    102,   0,   0,   0, 224,   8, 
+      0,   0, 102,   0,   0, 128, 
+    224,   8,   0,   0, 102,   0, 
+      0,   0, 252,   8,   0,   0, 
+    103,   0,   0, 128, 252,   8, 
+      0,   0, 103,   0,   0,   0, 
+     16,   9,   0,   0, 103,   0, 
+      0, 128,  16,   9,   0,   0, 
+    103,   0,   0,   0,  44,   9, 
+      0,   0, 103,   0,   0, 128, 
+     44,   9,   0,   0, 103,   0, 
+      0,   0,  72,   9,   0,   0, 
+    103,   0,   0, 128,  72,   9, 
+      0,   0, 103,   0,   0,   0, 
+     92,   9,   0,   0, 103,   0, 
+      0, 128,  92,   9,   0,   0, 
+    103,   0,   0,   0, 120,   9, 
+      0,   0, 104,   0,   0, 128, 
+    120,   9,   0,   0, 104,   0, 
+      0,   0, 140,   9,   0,   0, 
+    104,   0,   0, 128, 140,   9, 
+      0,   0, 104,   0,   0,   0, 
+    168,   9,   0,   0, 104,   0, 
+      0, 128, 168,   9,   0,   0, 
+    104,   0,   0,   0, 196,   9, 
+      0,   0, 104,   0,   0, 128, 
+    196,   9,   0,   0, 104,   0, 
+      0,   0, 216,   9,   0,   0, 
+    104,   0,   0, 128, 216,   9, 
+      0,   0, 104,   0,   0,   0, 
+    244,   9,   0,   0, 105,   0, 
+      0, 128, 244,   9,   0,   0, 
+    105,   0,   0,   0,  16,  10, 
+      0,   0, 105,   0,   0, 128, 
+     16,  10,   0,   0, 105,   0, 
+      0,   0,  28,  10,   0,   0, 
+    107,   0,   0, 128,  28,  10, 
+      0,   0, 107,   0,   0,   0, 
+     48,  10,   0,   0, 108,   0, 
+      0, 128,  48,  10,   0,   0, 
+    108,   0,   0,   0,  52,  10, 
+      0,   0, 109,   0,   0, 128, 
+     52,  10,   0,   0, 109,   0, 
+      0,   0,  80,  10,   0,   0, 
+    109,   0,   0, 128,  80,  10, 
+      0,   0, 109,   0,   0,   0, 
+     92,  10,   0,   0, 111,   0, 
+      0, 128,  92,  10,   0,   0, 
+    111,   0,   0,   0, 112,  10, 
+      0,   0, 112,   0,   0, 128, 
+    112,  10,   0,   0, 112,   0, 
+      0,   0, 116,  10,   0,   0, 
+    113,   0,   0, 128, 116,  10, 
+      0,   0, 113,   0,   0,   0, 
+    144,  10,   0,   0, 113,   0, 
+      0, 128, 144,  10,   0,   0, 
+    113,   0,   0,   0, 156,  10, 
+      0,   0, 115,   0,   0, 128, 
+    156,  10,   0,   0, 115,   0, 
+      0,   0, 176,  10,   0,   0, 
+    116,   0,   0, 128, 176,  10, 
+      0,   0, 116,   0,   0,   0, 
+    180,  10,   0,   0, 117,   0, 
+      0, 128, 180,  10,   0,   0, 
+    117,   0,   0,   0, 200,  10, 
+      0,   0, 118,   0,   0, 128, 
+    200,  10,   0,   0, 118,   0, 
+      0,   0, 204,  10,   0,   0, 
+    120,   0,   0, 128, 204,  10, 
+      0,   0, 120,   0,   0,   0, 
+    224,  10,   0,   0, 120,   0, 
+      0, 128, 224,  10,   0,   0, 
+    120,   0,   0,   0, 244,  10, 
+      0,   0, 120,   0,   0, 128, 
+    244,  10,   0,   0, 120,   0, 
+      0,   0,   8,  11,   0,   0, 
+    120,   0,   0, 128,   8,  11, 
+      0,   0, 120,   0,   0,   0, 
+     28,  11,   0,   0, 120,   0, 
+      0, 128,  28,  11,   0,   0, 
+    120,   0,   0,   0,  48,  11, 
+      0,   0, 120,   0,   0, 128, 
+     48,  11,   0,   0, 120,   0, 
+      0,   0,   5,   0,  79,   0, 
+     49,   0,  76,   0,   5,   0, 
+     79,   0,  21,   0,  77,   0, 
+      5,   0,  79,   0,  21,   0, 
+     77,   0,   5,   0,  79,   0, 
+     21,   0,  77,   0,   5,   0, 
+     79,   0,  11,   0,  78,   0, 
+      5,   0,  79,   0,  11,   0, 
+     78,   0,   5,   0,  79,   0, 
+     11,   0,  78,   0,   5,   0, 
+     28,   0,   5,   0,  27,   0, 
+      5,   0,  27,   0,   5,   0, 
+     26,   0,   5,   0,  72,   0, 
+     43,   0,  70,   0,   5,   0, 
+     72,   0,  23,   0,  71,   0, 
+      5,   0,  72,   0,  23,   0, 
+     71,   0,   5,   0,  72,   0, 
+     23,   0,  71,   0,   5,   0, 
+     72,   0,  23,   0,  71,   0, 
+      5,   0,  72,   0,  23,   0, 
+     71,   0,   5,   0,  49,   0, 
+     23,   0,  48,   0,   5,   0, 
+     49,   0,  23,   0,  48,   0, 
+      5,   0,  49,   0,  23,   0, 
+     48,   0,   5,   0,  49,   0, 
+     23,   0,  48,   0,   5,   0, 
+     55,   0,  23,   0,  54,   0, 
+      5,   0,  55,   0,  23,   0, 
+     54,   0,   5,   0,  55,   0, 
+     23,   0,  54,   0,   5,   0, 
+     55,   0,  23,   0,  54,   0, 
+      5,   0,  49,   0,   5,   0, 
+     48,   0,   5,   0,  25,   0, 
+      9,   0,  24,   0,   5,   0, 
+     25,   0,   9,   0,  24,   0, 
+      5,   0,  25,   0,   5,   0, 
+     25,   0,   9,   0,  44,   0, 
+     20,   0,  33,   0,   9,   0, 
+     44,   0,  20,   0,  33,   0, 
+      9,   0,  52,   0,  24,   0, 
+     37,   0,   9,   0,  52,   0, 
+     24,   0,  37,   0,   5,   0, 
+      5,   0,   5,   0,   5,   0, 
+     10,   0,  36,   0,  14,   0, 
+     35,   0,  10,   0,  36,   0, 
+     10,   0,  36,   0,  10,   0, 
+     36,   0,  10,   0,  36,   0, 
+      9,   0,  30,   0,  13,   0, 
+     24,   0,   9,   0,  30,   0, 
+     13,   0,  24,   0,   9,   0, 
+     30,   0,   9,   0,  30,   0, 
+     13,   0,  59,   0,  36,   0, 
+     47,   0,  13,   0,  59,   0, 
+     36,   0,  47,   0,  13,   0, 
+     59,   0,  24,   0,  48,   0, 
+     13,   0,  67,   0,  40,   0, 
+     51,   0,  13,   0,  67,   0, 
+     40,   0,  51,   0,  13,   0, 
+     67,   0,  28,   0,  52,   0, 
+      9,   0,   9,   0,   9,   0, 
+      9,   0,  13,   0,  59,   0, 
+     36,   0,  47,   0,  13,   0, 
+     59,   0,  36,   0,  47,   0, 
+     13,   0,  59,   0,  24,   0, 
+     48,   0,  13,   0,  67,   0, 
+     40,   0,  51,   0,  13,   0, 
+     67,   0,  40,   0,  51,   0, 
+     13,   0,  67,   0,  28,   0, 
+     52,   0,   9,   0,   9,   0, 
+      9,   0,   9,   0,   5,   0, 
+      5,   0,   5,   0,   5,   0, 
+      5,   0,   5,   0,   5,   0, 
+      5,   0,   5,   0,  24,   0, 
+      5,   0,  24,   0,   9,   0, 
+     78,   0,  29,   0,  42,   0, 
+      9,   0,  78,   0,  29,   0, 
+     42,   0,   9,   0,  78,   0, 
+     28,   0,  50,   0,   9,   0, 
+     78,   0,  27,   0,  59,   0, 
+      9,   0,  78,   0,  27,   0, 
+     59,   0,   9,   0,  78,   0, 
+     26,   0,  77,   0,   9,   0, 
+     78,   0,  29,   0,  42,   0, 
+      9,   0,  78,   0,  29,   0, 
+     42,   0,   9,   0,  78,   0, 
+     28,   0,  50,   0,   9,   0, 
+     78,   0,  27,   0,  59,   0, 
+      9,   0,  78,   0,  27,   0, 
+     59,   0,   9,   0,  78,   0, 
+     26,   0,  77,   0,   9,   0, 
+     77,   0,  29,   0,  41,   0, 
+      9,   0,  77,   0,  29,   0, 
+     41,   0,   9,   0,  77,   0, 
+     28,   0,  49,   0,   9,   0, 
+     77,   0,  27,   0,  58,   0, 
+      9,   0,  77,   0,  27,   0, 
+     58,   0,   9,   0,  77,   0, 
+     26,   0,  76,   0,   9,   0, 
+     69,   0,  34,   0,  51,   0, 
+      9,   0,  69,   0,  34,   0, 
+     51,   0,   9,   0,  69,   0, 
+     33,   0,  59,   0,   9,   0, 
+     69,   0,  32,   0,  68,   0, 
+      9,   0,  69,   0,  32,   0, 
+     68,   0,   9,   0,  69,   0, 
+     34,   0,  51,   0,   9,   0, 
+     69,   0,  34,   0,  51,   0, 
+      9,   0,  69,   0,  33,   0, 
+     59,   0,   9,   0,  69,   0, 
+     32,   0,  68,   0,   9,   0, 
+     69,   0,  32,   0,  68,   0, 
+      9,   0,  68,   0,  34,   0, 
+     50,   0,   9,   0,  68,   0, 
+     34,   0,  50,   0,   9,   0, 
+     68,   0,  33,   0,  58,   0, 
+      9,   0,  68,   0,  32,   0, 
+     67,   0,   9,   0,  68,   0, 
+     32,   0,  67,   0,   9,   0, 
+     50,   0,  13,   0,  49,   0, 
+      9,   0,  50,   0,   9,   0, 
+     50,   0,  13,   0,  50,   0, 
+     13,   0,  49,   0,   9,   0, 
+      9,   0,   9,   0,   9,   0, 
+      9,   0,  50,   0,  13,   0, 
+     49,   0,   9,   0,  50,   0, 
+      9,   0,  50,   0,  13,   0, 
+     50,   0,  13,   0,  49,   0, 
+      9,   0,   9,   0,   9,   0, 
+      9,   0,   9,   0,  50,   0, 
+     13,   0,  49,   0,   9,   0, 
+     50,   0,   9,   0,  50,   0, 
+     13,   0,  50,   0,  13,   0, 
+     49,   0,   9,   0,   9,   0, 
+      9,   0,   9,   0,   9,   0, 
+     29,   0,   9,   0,  28,   0, 
+      5,   0,   5,   0,   5,   0, 
+      5,   0,   5,   0,  18,   0, 
+      5,   0,  18,   0,   5,   0, 
+     18,   0,   5,   0,  18,   0, 
+      5,   0,  18,   0,   5,   0, 
+     18,   0,   5,   0,  18,   0, 
+      5,   0,  18,   0,   5,   0, 
+     18,   0,   5,   0,  18,   0, 
+      5,   0,  18,   0,   5,   0, 
+     18,   0, 246,   0,   0,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,  28,   0,   0,   0, 
+      0,   0,   0,   0,  36,   0, 
+      0,   0,  72,   0,   0,   0, 
+    100,   0,   0,   0, 132,   0, 
+      0,   0, 164,   0,   0,   0, 
+    200,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   2, 
+     10,   0,  24,  21,  11,  16, 
+      0,   0,   1,   0,   0,   2, 
+     10,   0,  24,  21, 117,   0, 
+      0,   0,   1,   0,   1,   0, 
+     10,   0,  24,  21,  15,  16, 
+      0,   0,   1,   0,   0,   2, 
+     10,   0,  24,  21,  64,   0, 
+      0,   0,   1,   0,   1,   0, 
+     10,   0,  24,  21,  17,  16, 
+      0,   0,   1,   0,   0,   2, 
+     90,   0,   3,  18,  13,  21, 
+      3,   0, 117,   0,   0,   0, 
+      0,   0, 100,  97, 121,  76, 
+    105, 103, 104, 116,  49,   0, 
+     13,  21,   3,   0, 117,   0, 
+      0,   0,   4,   0, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  49,   0, 
+     13,  21,   3,   0, 117,   0, 
+      0,   0,   8,   0, 100,  97, 
+    121,  76, 105, 103, 104, 116, 
+     50,   0,  13,  21,   3,   0, 
+    117,   0,   0,   0,  12,   0, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     50,   0,  34,   0,   5,  21, 
+      4,   0,   0,   0,  19,  16, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+     86, 101, 114, 116, 101, 120, 
+     76, 105, 103, 104, 116,   0, 
+    242, 241,  14,   0,  23,  21, 
+     20,  16,   0,   0,  26,   2, 
+      0,   0,   0,   0, 242, 241, 
+     10,   0,  24,  21,  21,  16, 
+      0,   0,   1,   0,   1,   0, 
+     10,   0,  24,  21,  22,  16, 
+      0,   0,   1,   0,   0,   2, 
+      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,   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, 
+      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,   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, 
+      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,   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,  11, 202, 
+     49,   1,  56,   0,   0,   0, 
+      0,  16,   0,   0,  24,  16, 
+      0,   0, 176,   2,   0,   0, 
+     10,   0, 255, 255,   4,   0, 
+      0,   0, 255, 255,   3,   0, 
+      0,   0,   0,   0,  96,   0, 
+      0,   0,  96,   0,   0,   0, 
+      8,   0,   0,   0, 104,   0, 
+      0,   0,   0,   0,   0,   0, 
+     22,   0,  27,  21,  64,   0, 
+      0,   0,   4,   0,   0,   0, 
+     16,   0, 102, 108, 111,  97, 
+    116,  52,   0, 243, 242, 241, 
+     22,   0,  27,  21,  64,   0, 
+      0,   0,   2,   0,   0,   0, 
+      8,   0, 102, 108, 111,  97, 
+    116,  50,   0, 243, 242, 241, 
+     22,   0,  27,  21,  64,   0, 
+      0,   0,   3,   0,   0,   0, 
+     12,   0, 102, 108, 111,  97, 
+    116,  51,   0, 243, 242, 241, 
+     94,   0,   3,  18,  13,  21, 
+      3,   0,   0,  16,   0,   0, 
+      0,   0, 112, 111, 115, 105, 
+    116, 105, 111, 110,   0, 241, 
+     13,  21,   3,   0,   1,  16, 
+      0,   0,  16,   0, 116, 101, 
+    120,   0, 242, 241,  13,  21, 
+      3,   0,   2,  16,   0,   0, 
+     24,   0, 110, 111, 114, 109, 
+     97, 108,   0, 243, 242, 241, 
+     13,  21,   3,   0, 117,   0, 
+      0,   0,  36,   0, 107, 110, 
+    111,  99, 104, 101, 110,   0, 
+    242, 241,  13,  21,   3,   0, 
+    117,   0,   0,   0,  40,   0, 
+    105, 100,   0, 243, 242, 241, 
+     38,   0,   5,  21,   5,   0, 
+      0,   0,   3,  16,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  44,   0,  86, 101, 
+    114, 116, 101, 120,  73, 110, 
+    112, 117, 116,  84, 121, 112, 
+    101,   0, 242, 241,  10,   0, 
+      1,  18,   1,   0,   0,   0, 
+      4,  16,   0,   0,  94,   0, 
+      3,  18,  13,  21,   3,   0, 
+      0,  16,   0,   0,   0,   0, 
+    119, 111, 114, 108, 100,  80, 
+    111, 115,   0, 241,  13,  21, 
+      3,   0,   0,  16,   0,   0, 
+     16,   0, 112, 111, 115, 105, 
+    116, 105, 111, 110,   0, 241, 
+     13,  21,   3,   0,   1,  16, 
+      0,   0,  32,   0, 116, 101, 
+    120,   0, 242, 241,  13,  21, 
+      3,   0,   2,  16,   0,   0, 
+     40,   0, 110, 111, 114, 109, 
+     97, 108,   0, 243, 242, 241, 
+     13,  21,   3,   0,   0,  16, 
+      0,   0,  52,   0, 108, 105, 
+    103, 104, 116,   0,  38,   0, 
+      5,  21,   5,   0,   0,   0, 
+      6,  16,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     68,   0,  80, 105, 120, 101, 
+    108,  73, 110, 112, 117, 116, 
+     84, 121, 112, 101,   0, 243, 
+    242, 241,  10,   0,  24,  21, 
+      7,  16,   0,   0,   1,   0, 
+      1,   0,  14,   0,   8,  16, 
+      8,  16,   0,   0,  23,   0, 
+      1,   0,   5,  16,   0,   0, 
+     30,   0,  28,  21,  64,   0, 
+      0,   0,   4,   0,   0,   0, 
+      4,   0,   0,   0,  16,   0, 
+      0,   0,   0,  64,   0, 102, 
+    108, 111,  97, 116,  52, 120, 
+     52,   0,  10,   0,  24,  21, 
+     10,  16,   0,   0,   1,   0, 
+      1,   0,  18,   0,  22,  21, 
+     11,  16,   0,   0,  34,   0, 
+      0,   0,  64,   0,   0,   0, 
+      0,  32,   0, 241,  10,   0, 
+     24,  21,  12,  16,   0,   0, 
+     11, 202,  49,   1,  56,   0, 
+      0,   0,   0,  16,   0,   0, 
+      0,  16,   0,   0,   0,   0, 
+      0,   0,  11,   0, 255, 255, 
+      4,   0,   0,   0, 255, 255, 
+      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,   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,   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,   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,   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,   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,   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,   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,   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,   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,  95,  73,  68,  48, 
+     59,  13,  10,  32,  32,  32, 
+     32, 117, 105, 110, 116,  32, 
+    105, 100,  32,  58,  32,  86, 
+     69,  82,  84,  69,  88,  95, 
+     73,  68,  48,  59,  13,  10, 
+    125,  59,  13,  10,  13,  10, 
+    115, 116, 114, 117,  99, 116, 
+     32,  80, 105, 120, 101, 108, 
+     73, 110, 112, 117, 116,  84, 
+    121, 112, 101,  13,  10, 123, 
+     13,  10,  32,  32,  32,  32, 
+    102, 108, 111,  97, 116,  52, 
+     32, 119, 111, 114, 108, 100, 
+     80, 111, 115,  32,  58,  32, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  52,  32, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     32,  58,  32,  83,  86,  95, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,  59,  13,  10,  32, 
+     32,  32,  32, 102, 108, 111, 
+     97, 116,  50,  32, 116, 101, 
+    120,  32,  58,  32,  84,  69, 
+     88,  67,  79,  79,  82,  68, 
+     48,  59,  13,  10,  32,  32, 
+     32,  32, 102, 108, 111,  97, 
+    116,  51,  32, 110, 111, 114, 
+    109,  97, 108,  32,  58,  32, 
+     84,  69,  88,  67,  79,  79, 
+     82,  68,  49,  59,  13,  10, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  52,  32, 108, 
+    105, 103, 104, 116,  32,  58, 
+     32,  84,  69,  88,  67,  79, 
+     79,  82,  68,  50,  59,  13, 
+     10, 125,  59,  13,  10,  13, 
+     10,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  13,  10,  47, 
+     47,  32,  86, 101, 114, 116, 
+    101, 120,  32,  83, 104,  97, 
+    100, 101, 114,  13,  10,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  47,  47,  47,  47,  47, 
+     47,  13,  10,  80, 105, 120, 
+    101, 108,  73, 110, 112, 117, 
+    116,  84, 121, 112, 101,  32, 
+     84, 101, 120, 116, 117, 114, 
+    101,  86, 101, 114, 116, 101, 
+    120,  83, 104,  97, 100, 101, 
+    114,  40,  86, 101, 114, 116, 
+    101, 120,  73, 110, 112, 117, 
+    116,  84, 121, 112, 101,  32, 
+    105, 110, 112, 117, 116,  41, 
+     13,  10, 123,  13,  10,  32, 
+     32,  32,  32,  47,  47,  32, 
+    114, 101, 116, 117, 114, 110, 
+     32, 105, 110, 112, 117, 116, 
+     59,  13,  10,  32,  32,  32, 
+     32,  80, 105, 120, 101, 108, 
+     73, 110, 112, 117, 116,  84, 
+    121, 112, 101,  32, 111, 117, 
+    116, 112, 117, 116,  59,  13, 
+     10,  32,  32,  32,  32, 111, 
+    117, 116, 112, 117, 116,  46, 
+    110, 111, 114, 109,  97, 108, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32,  61,  32, 
+    110, 111, 114, 109,  97, 108, 
+    105, 122, 101,  40, 109, 117, 
+    108,  40, 105, 110, 112, 117, 
+    116,  46, 110, 111, 114, 109, 
+     97, 108,  44,  32,  40, 102, 
+    108, 111,  97, 116,  51, 120, 
+     51,  41, 107, 110, 111,  99, 
+    104, 101, 110,  77,  97, 116, 
+    114, 105, 120,  91, 105, 110, 
+    112, 117, 116,  46, 107, 110, 
+    111,  99, 104, 101, 110,  93, 
+     41,  41,  59,  13,  10,  13, 
+     10,  32,  32,  32,  32,  47, 
+     47,  32,  67, 104,  97, 110, 
+    103, 101,  32, 116, 104, 101, 
+     32, 112, 111, 115, 105, 116, 
+    105, 111, 110,  32, 118, 101, 
+     99, 116, 111, 114,  32, 116, 
+    111,  32,  98, 101,  32,  52, 
+     32, 117, 110, 105, 116, 115, 
+     32, 102, 111, 114,  32, 112, 
+    114, 111, 112, 101, 114,  32, 
+    109,  97, 116, 114, 105, 120, 
+     32,  99,  97, 108,  99, 117, 
+    108,  97, 116, 105, 111, 110, 
+    115,  46,  13,  10,  32,  32, 
+     32,  32, 105, 110, 112, 117, 
+    116,  46, 112, 111, 115, 105, 
+    116, 105, 111, 110,  46, 119, 
+     32,  61,  32,  49,  46,  48, 
+    102,  59,  13,  10,  13,  10, 
+     32,  32,  32,  32,  47,  47, 
+     32,  83, 116, 111, 114, 101, 
+     32, 116, 104, 101,  32, 116, 
+    101, 120, 116, 117, 114, 101, 
+     32,  99, 111, 111, 114, 100, 
+    105, 110,  97, 116, 101, 115, 
+     32, 102, 111, 114,  32, 116, 
+    104, 101,  32, 112, 105, 120, 
+    101, 108,  32, 115, 104,  97, 
+    100, 101, 114,  46,  13,  10, 
+     32,  32,  32,  32, 111, 117, 
+    116, 112, 117, 116,  46, 116, 
+    101, 120,  32,  61,  32, 105, 
+    110, 112, 117, 116,  46, 116, 
+    101, 120,  59,  13,  10,  13, 
+     10,  32,  32,  32,  32,  47, 
+     47,  32,  67,  97, 108,  99, 
+    117, 108,  97, 116, 101,  32, 
+    116, 104, 101,  32, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     32, 111, 102,  32, 116, 104, 
+    101,  32, 118, 101, 114, 116, 
+    101, 120,  32,  97, 103,  97, 
+    105, 110, 115, 116,  32, 116, 
+    104, 101,  32, 119, 111, 114, 
+    108, 100,  44,  32, 118, 105, 
+    101, 119,  44,  32,  97, 110, 
+    100,  13,  10,  32,  32,  32, 
+     32,  47,  47,  32, 112, 114, 
+    111, 106, 101,  99, 116, 105, 
+    111, 110,  32, 109,  97, 116, 
+    114, 105,  99, 101, 115,  46, 
+     13,  10,  32,  32,  32,  32, 
+    111, 117, 116, 112, 117, 116, 
+     46, 119, 111, 114, 108, 100, 
+     80, 111, 115,  32,  61,  32, 
+    109, 117, 108,  40, 105, 110, 
+    112, 117, 116,  46, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     44,  32, 107, 110, 111,  99, 
+    104, 101, 110,  77,  97, 116, 
+    114, 105, 120,  91, 105, 110, 
+    112, 117, 116,  46, 107, 110, 
+    111,  99, 104, 101, 110,  93, 
+     41,  59,  13,  10,  32,  32, 
+     32,  32, 111, 117, 116, 112, 
+    117, 116,  46, 112, 111, 115, 
+    105, 116, 105, 111, 110,  32, 
+     61,  32, 109, 117, 108,  40, 
+    111, 117, 116, 112, 117, 116, 
+     46, 119, 111, 114, 108, 100, 
+     80, 111, 115,  44,  32, 118, 
+    105, 101, 119,  41,  59,  13, 
+     10,  32,  32,  32,  32, 111, 
+    117, 116, 112, 117, 116,  46, 
+    112, 111, 115, 105, 116, 105, 
+    111, 110,  32,  61,  32, 109, 
+    117, 108,  40, 111, 117, 116, 
+    112, 117, 116,  46, 112, 111, 
+    115, 105, 116, 105, 111, 110, 
+     44,  32, 112, 114, 111, 106, 
+    101,  99, 116, 105, 111, 110, 
+     41,  59,  13,  10,  32,  32, 
+     32,  32, 111, 117, 116, 112, 
+    117, 116,  46, 108, 105, 103, 
+    104, 116,  32,  61,  32, 102, 
+    108, 111,  97, 116,  52,  40, 
+     49,  46,  48, 102,  44,  32, 
+     49,  46,  48, 102,  44,  32, 
+     49,  46,  48, 102,  44,  32, 
+     48,  46, 102,  41,  59,  13, 
+     10,  32,  32,  32,  32, 117, 
+    105, 110, 116,  32, 100,  97, 
+    121,  76, 105, 103, 104, 116, 
+     59,  13,  10,  32,  32,  32, 
+     32, 117, 105, 110, 116,  32, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     59,  13,  10,  32,  32,  32, 
+     32, 105, 102,  32,  40, 108, 
+    105, 103, 104, 116,  76, 101, 
+    110, 103, 116, 104,  32,  61, 
+     61,  32,  49,  41,  13,  10, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 100,  97, 121, 
+     76, 105, 103, 104, 116,  32, 
+     61,  32, 108, 105, 103, 104, 
+    116,  66, 117, 102, 102, 101, 
+    114,  91,  48,  93,  46, 100, 
+     97, 121,  76, 105, 103, 104, 
+    116,  49,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 100, 121, 110,  97, 109, 
+    105,  99,  76, 105, 103, 104, 
+    116,  32,  61,  32, 108, 105, 
+    103, 104, 116,  66, 117, 102, 
+    102, 101, 114,  91,  48,  93, 
+     46, 100, 121, 110,  97, 109, 
+    105,  99,  76, 105, 103, 104, 
+    116,  49,  59,  13,  10,  32, 
+     32,  32,  32, 125,  13,  10, 
+     32,  32,  32,  32, 101, 108, 
+    115, 101,  32, 105, 102,  32, 
+     40, 105, 110, 112, 117, 116, 
+     46, 105, 100,  32,  60,  32, 
+    108, 105, 103, 104, 116,  76, 
+    101, 110, 103, 116, 104,  41, 
+     13,  10,  32,  32,  32,  32, 
+    123,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32, 105, 
+    102,  32,  40, 105, 110, 112, 
+    117, 116,  46, 105, 100,  32, 
+     37,  32,  50,  32,  61,  61, 
+     32,  48,  41,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 123,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32, 100,  97, 
+    121,  76, 105, 103, 104, 116, 
+     32,  61,  32, 108, 105, 103, 
+    104, 116,  66, 117, 102, 102, 
+    101, 114,  91, 105, 110, 112, 
+    117, 116,  46, 105, 100,  32, 
+     47,  32,  50,  93,  46, 100, 
+     97, 121,  76, 105, 103, 104, 
+    116,  49,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32, 100, 
+    121, 110,  97, 109, 105,  99, 
+     76, 105, 103, 104, 116,  32, 
+     61,  32, 108, 105, 103, 104, 
+    116,  66, 117, 102, 102, 101, 
+    114,  91, 105, 110, 112, 117, 
+    116,  46, 105, 100,  32,  47, 
+     32,  50,  93,  46, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  49,  59, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 125,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 101, 108, 115, 
+    101,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32, 123, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32, 100,  97, 121,  76, 
+    105, 103, 104, 116,  32,  61, 
+     32, 108, 105, 103, 104, 116, 
+     66, 117, 102, 102, 101, 114, 
+     91, 105, 110, 112, 117, 116, 
+     46, 105, 100,  32,  47,  32, 
+     50,  93,  46, 100,  97, 121, 
+     76, 105, 103, 104, 116,  50, 
+     59,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32,  32, 100, 121, 110, 
+     97, 109, 105,  99,  76, 105, 
+    103, 104, 116,  32,  61,  32, 
+    108, 105, 103, 104, 116,  66, 
+    117, 102, 102, 101, 114,  91, 
+    105, 110, 112, 117, 116,  46, 
+    105, 100,  32,  47,  32,  50, 
+     93,  46, 100, 121, 110,  97, 
+    109, 105,  99,  76, 105, 103, 
+    104, 116,  50,  59,  13,  10, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32, 125,  13,  10,  32, 
+     32,  32,  32, 125,  13,  10, 
+     32,  32,  32,  32, 105, 102, 
+     32,  40, 108, 105, 103, 104, 
+    116,  76, 101, 110, 103, 116, 
+    104,  32,  62,  32,  48,  41, 
+     13,  10,  32,  32,  32,  32, 
+    123,  13,  10,  32,  32,  32, 
+     32,  32,  32,  32,  32, 111, 
+    117, 116, 112, 117, 116,  46, 
+    108, 105, 103, 104, 116,  46, 
+    120,  32,  61,  32,  40,  40, 
+     40, 100,  97, 121,  76, 105, 
+    103, 104, 116,  32,  62,  62, 
+     32,  50,  52,  41,  32,  38, 
+     32,  48, 120,  70,  70,  41, 
+     32,  47,  32,  50,  53,  53, 
+     46, 102,  41,  32,  42,  32, 
+    100,  97, 121,  76, 105, 103, 
+    104, 116,  70,  97,  99, 116, 
+    111, 114,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 108, 105, 103, 104, 
+    116,  46, 121,  32,  61,  32, 
+     40,  40,  40, 100,  97, 121, 
+     76, 105, 103, 104, 116,  32, 
+     62,  62,  32,  49,  54,  41, 
+     32,  38,  32,  48, 120,  70, 
+     70,  41,  32,  47,  32,  50, 
+     53,  53,  46, 102,  41,  32, 
+     42,  32, 100,  97, 121,  76, 
+    105, 103, 104, 116,  70,  97, 
+     99, 116, 111, 114,  59,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 111, 117, 116, 
+    112, 117, 116,  46, 108, 105, 
+    103, 104, 116,  46, 122,  32, 
+     61,  32,  40,  40,  40, 100, 
+     97, 121,  76, 105, 103, 104, 
+    116,  32,  62,  62,  32,  56, 
+     41,  32,  38,  32,  48, 120, 
+     70,  70,  41,  32,  47,  32, 
+     50,  53,  53,  46, 102,  41, 
+     32,  42,  32, 100,  97, 121, 
+     76, 105, 103, 104, 116,  70, 
+     97,  99, 116, 111, 114,  59, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 102, 108, 
+    111,  97, 116,  51,  32, 100, 
+    121, 110,  97, 109, 105,  99, 
+     76, 105, 103, 104, 116,  82, 
+    101, 115, 117, 108, 116,  59, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  82, 101, 
+    115, 117, 108, 116,  46, 120, 
+     32,  61,  32,  40,  40, 100, 
+    121, 110,  97, 109, 105,  99, 
+     76, 105, 103, 104, 116,  32, 
+     62,  62,  32,  50,  52,  41, 
+     32,  38,  32,  48, 120,  70, 
+     70,  41,  32,  47,  32,  50, 
+     53,  53,  46, 102,  59,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32, 100, 121, 110, 
+     97, 109, 105,  99,  76, 105, 
+    103, 104, 116,  82, 101, 115, 
+    117, 108, 116,  46, 121,  32, 
+     61,  32,  40,  40, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  32,  62, 
+     62,  32,  49,  54,  41,  32, 
+     38,  32,  48, 120,  70,  70, 
+     41,  32,  47,  32,  50,  53, 
+     53,  46, 102,  59,  13,  10, 
+     32,  32,  32,  32,  32,  32, 
+     32,  32, 100, 121, 110,  97, 
+    109, 105,  99,  76, 105, 103, 
+    104, 116,  82, 101, 115, 117, 
+    108, 116,  46, 122,  32,  61, 
+     32,  40,  40, 100, 121, 110, 
+     97, 109, 105,  99,  76, 105, 
+    103, 104, 116,  32,  62,  62, 
+     32,  56,  41,  32,  38,  32, 
+     48, 120,  70,  70,  41,  32, 
+     47,  32,  50,  53,  53,  46, 
+    102,  59,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    105, 102,  32,  40, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  82, 101, 
+    115, 117, 108, 116,  46, 120, 
+     32,  62,  32, 111, 117, 116, 
+    112, 117, 116,  46, 108, 105, 
+    103, 104, 116,  46, 120,  41, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 108, 105, 103, 104, 
+    116,  46, 120,  32,  61,  32, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     82, 101, 115, 117, 108, 116, 
+     46, 120,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 125,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    105, 102,  32,  40, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  82, 101, 
+    115, 117, 108, 116,  46, 121, 
+     32,  62,  32, 111, 117, 116, 
+    112, 117, 116,  46, 108, 105, 
+    103, 104, 116,  46, 121,  41, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 108, 105, 103, 104, 
+    116,  46, 121,  32,  61,  32, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     82, 101, 115, 117, 108, 116, 
+     46, 121,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 125,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    105, 102,  32,  40, 100, 121, 
+    110,  97, 109, 105,  99,  76, 
+    105, 103, 104, 116,  82, 101, 
+    115, 117, 108, 116,  46, 122, 
+     32,  62,  32, 111, 117, 116, 
+    112, 117, 116,  46, 108, 105, 
+    103, 104, 116,  46, 122,  41, 
+     13,  10,  32,  32,  32,  32, 
+     32,  32,  32,  32, 123,  13, 
+     10,  32,  32,  32,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 111, 117, 116, 112, 117, 
+    116,  46, 108, 105, 103, 104, 
+    116,  46, 122,  32,  61,  32, 
+    100, 121, 110,  97, 109, 105, 
+     99,  76, 105, 103, 104, 116, 
+     82, 101, 115, 117, 108, 116, 
+     46, 122,  59,  13,  10,  32, 
+     32,  32,  32,  32,  32,  32, 
+     32, 125,  13,  10,  32,  32, 
+     32,  32,  32,  32,  32,  32, 
+    111, 117, 116, 112, 117, 116, 
+     46, 108, 105, 103, 104, 116, 
+     46, 119,  32,  61,  32,  49, 
+     46, 102,  59,  13,  10,  32, 
+     32,  32,  32, 125,  13,  10, 
+     13,  10,  32,  32,  32,  32, 
+    114, 101, 116, 117, 114, 110, 
+     32, 111, 117, 116, 112, 117, 
+    116,  59,  13,  10, 125,   0, 
+      7,   0,   0,   0,   0,   0, 
+      0,   0, 131,   0,   0,   0, 
+    132,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   6,   1, 
+      0,   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,   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,   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,   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,   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,   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,   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,  68,  51,  68,  83, 
+     72,  68,  82,   0,  52,  11, 
+      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,  32,   0,   0,  96, 
+      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,   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, 
+      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,   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, 
+      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,   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, 
+      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,   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, 
+      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,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,  26,   9,  47, 241, 
+     56,   0,   0,   0,  32,   2, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,  73,   0, 
+      0,   0,   1,   0,   0,   0, 
+    133,   0,   0,   0,   1,   0, 
+      0,   0,  37,   0,   0,   0, 
+      1,   0,   0,   0, 201,   0, 
+      0,   0,   1,   0,   0,   0, 
+    165,   0,   0,   0,   1,   0, 
+      0,   0, 101,   0,   0,   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,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   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, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0, 128,   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,   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,   4,   0,   0, 
+      0,   0,  64,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,  32,   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,   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,   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,   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,   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, 
+      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,   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,  12,   0,   0,   0, 
+     24,   0,   0,   0,  36,   0, 
+      0,   0,  48,   0,   0,   0, 
+     60,   0,   0,   0,  72,   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,   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,   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,   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,   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,   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,   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,   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,   0, 
+      0,   0,  34,   0,  37,  17, 
+      0,   0,   0,   0, 140,   0, 
+      0,   0,   1,   0,  84, 101, 
+    120, 116, 117, 114, 101,  86, 
+    101, 114, 116, 101, 120,  83, 
+    104,  97, 100, 101, 114,   0, 
+      0,   0,  34,   0,  81,  17, 
+     13,  16,   0,   0,   8,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255, 255, 255, 107, 110, 
+    111,  99, 104, 101, 110,  77, 
+     97, 116, 114, 105, 120,   0, 
+      0,   0,  26,   0,  81,  17, 
+     14,  16,   0,   0,   8,   0, 
+      1,   0,   0,   0, 255, 255, 
+    255, 255, 255, 255, 118, 105, 
+    101, 119,   0,   0,   0,   0, 
+     30,   0,  81,  17,  14,  16, 
+      0,   0,   8,   0,   1,   0, 
+     64,   0, 255, 255, 255, 255, 
+    255, 255, 112, 114, 111, 106, 
+    101,  99, 116, 105, 111, 110, 
+      0,   0,  30,   0,  81,  17, 
+     16,  16,   0,   0,   8,   0, 
+      2,   0,   0,   0, 255, 255, 
+    255, 255, 255, 255, 108, 105, 
+    103, 104, 116,  76, 101, 110, 
+    103, 116, 104,   0,  34,   0, 
+     81,  17,  18,  16,   0,   0, 
+      8,   0,   2,   0,   4,   0, 
+    255, 255, 255, 255, 255, 255, 
+    100,  97, 121,  76, 105, 103, 
+    104, 116,  70,  97,  99, 116, 
+    111, 114,   0,   0,  30,   0, 
+     81,  17,  23,  16,   0,   0, 
+      7,   0, 255, 255, 255, 255, 
+      0,   0, 255, 255, 255, 255, 
+    108, 105, 103, 104, 116,  66, 
+    117, 102, 102, 101, 114,   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,   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,   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,   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,   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,   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,  16,   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, 255, 255, 255, 255, 
+     26,   9,  47, 241,   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,   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,   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,   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,   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,   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,   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,   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,   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,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    148,  46,  49,   1, 246, 205, 
+    243,  99,   1,   0,   0,   0, 
+    126,  73, 155,   7,  12,   9, 
+     91,  68, 152, 228, 190,  13, 
+    189, 245, 129, 235, 175,   0, 
+      0,   0,  47,  76, 105, 110, 
+    107,  73, 110, 102, 111,   0, 
+     47, 110,  97, 109, 101, 115, 
+      0,  47, 115, 114,  99,  47, 
+    104, 101,  97, 100, 101, 114, 
+     98, 108, 111,  99, 107,   0, 
+     47, 115, 114,  99,  47, 102, 
+    105, 108, 101, 115,  47,  99, 
+     58,  92, 117, 115, 101, 114, 
+    115,  92, 107, 111, 108, 106, 
+     97,  92, 100, 101, 115, 107, 
+    116, 111, 112,  92, 107, 111, 
+    108, 106,  97,  45, 115, 116, 
+    114, 111, 104, 109,  45, 103, 
+     97, 109, 101, 115,  92, 115, 
+    112, 105, 101, 108, 101,  32, 
+    112, 108,  97, 116, 102, 111, 
+    114, 109,  92, 115, 116,  97, 
+    110, 100,  97, 108, 111, 119, 
+    110,  92, 107, 108, 105, 101, 
+    110, 116,  92, 102,  97,  99, 
+    116, 111, 114, 121,  99, 114, 
+     97, 102, 116,  92, 102,  97, 
+     99, 116, 111, 114, 121,  99, 
+    114,  97, 102, 116,  92, 100, 
+    120,  49,  49,  99, 117, 115, 
+    116, 111, 109, 118, 101, 114, 
+    116, 101, 120, 115, 104,  97, 
+    100, 101, 114,  46, 104, 108, 
+    115, 108,   0,   4,   0,   0, 
+      0,   6,   0,   0,   0,   1, 
+      0,   0,   0,  30,   0,   0, 
+      0,   0,   0,   0,   0,  17, 
+      0,   0,   0,   7,   0,   0, 
+      0,  34,   0,   0,   0,   8, 
+      0,   0,   0,  10,   0,   0, 
+      0,   6,   0,   0,   0,   0, 
+      0,   0,   0,   5,   0,   0, 
+      0,   0,   0,   0,   0, 220, 
+     81,  51,   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,   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,   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,   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,   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,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+    119,   9,  49,   1,   1,   0, 
+      0,   0,  13,   0,   0, 142, 
+     14,   0,  63,  92,  15,   0, 
+      0,   0,  92,   0,   0,   0, 
+     32,   0,   0,   0,  44,   0, 
+      0,   0, 144,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  22,   0,   0,   0, 
+     25,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+     52,  11,   0,   0,  32,   0, 
+      0,  96,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   9,   0, 
+    112,   7,   0,   0,   0,   0, 
+      0,   0, 108,  10,   0,   0, 
+      1,   0, 210,  45,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  84, 101, 
+    120, 116, 117, 114, 101,  86, 
+    101, 114, 116, 101, 120,  83, 
+    104,  97, 100, 101, 114,   0, 
+    110, 111, 110, 101,   0,   0, 
+      0,   0,  45, 186,  46, 241, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  52,  11,   0,   0, 
+     32,   0,   0,  96,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      2,   0,   7,   0,   0,   0, 
+      0,   0,   1,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+     52,  11,   0,   0,   8,   2, 
+      0,   0,   0,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      1,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+     67,  58,  92,  85, 115, 101, 
+    114, 115,  92, 107, 111, 108, 
+    106,  97,  92,  68, 101, 115, 
+    107, 116, 111, 112,  92,  75, 
+    111, 108, 106,  97,  45,  83, 
+    116, 114, 111, 104, 109,  45, 
+     71,  97, 109, 101, 115,  92, 
+     83, 112, 105, 101, 108, 101, 
+     32,  80, 108,  97, 116, 102, 
+    111, 114, 109,  92,  83, 116, 
+     97, 110, 100,  97, 108, 111, 
+    119, 110,  92,  75, 108, 105, 
+    101, 110, 116,  92,  70,  97, 
+     99, 116, 111, 114, 121,  67, 
+    114,  97, 102, 116,  92,  70, 
+     97,  99, 116, 111, 114, 121, 
+     67, 114,  97, 102, 116,  92, 
+     68,  88,  49,  49,  67, 117, 
+    115, 116, 111, 109,  86, 101, 
+    114, 116, 101, 120,  83, 104, 
+     97, 100, 101, 114,  46, 104, 
+    108, 115, 108,   0,   0,   0, 
+    254, 239, 254, 239,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   1,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255,  12, 
+      0, 255, 255, 255, 255, 255, 
+    255, 255, 255, 255, 255,   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,   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,  16,   0, 
+      0,   0,  32,   0,   0,   0, 
+     11,   1,   0,   0, 232,   2, 
+      0,   0, 167,   1,   0,   0, 
+     56,   0,   0,   0,   0,   0, 
+      0,   0, 192,  14,   0,   0, 
+    128,   0,   0,   0, 137,  13, 
+      0,   0, 252,  17,   0,   0, 
+    104,   0,   0,   0,   0,   0, 
+      0,   0,  40,   0,   0,   0, 
+    104,   2,   0,   0,  44,   0, 
+      0,   0, 232,   0,   0,   0, 
+      3,   0,   0,   0,  40,   0, 
+      0,   0,  27,   0,   0,   0, 
+     26,   0,   0,   0,  41,   0, 
+      0,   0,  28,   0,   0,   0, 
+     15,   0,   0,   0,   6,   0, 
+      0,   0,  29,   0,   0,   0, 
+     30,   0,   0,   0,  31,   0, 
+      0,   0,  32,   0,   0,   0, 
+     33,   0,   0,   0,  34,   0, 
+      0,   0,  16,   0,   0,   0, 
+      8,   0,   0,   0,   9,   0, 
+      0,   0,  10,   0,   0,   0, 
+     11,   0,   0,   0,  12,   0, 
+      0,   0,  13,   0,   0,   0, 
+     14,   0,   0,   0,  17,   0, 
+      0,   0,  18,   0,   0,   0, 
+     19,   0,   0,   0,  20,   0, 
+      0,   0,  21,   0,   0,   0, 
+     22,   0,   0,   0,  23,   0, 
+      0,   0,  24,   0,   0,   0, 
+     25,   0,   0,   0,   7,   0, 
+      0,   0,  35,   0,   0,   0, 
+     36,   0,   0,   0,  37,   0, 
+      0,   0,  39,   0,   0,   0, 
+     38,   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,   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,   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,   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,   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,   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, 
+     42,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   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,   8,   0,   0,   0, 
-      1,   0,   0,   0,   4,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 

+ 13 - 4
FactoryCraft/DX11CustomPixelShader.hlsl

@@ -40,7 +40,7 @@ struct PointLight
 
 cbuffer TexturEffect : register(b3)
 {
-	bool effectEnabled;
+    bool effectEnabled;
 	float effectPercentage;
 };
 
@@ -68,17 +68,26 @@ float4 TexturePixelShader(PixelInputType input) : SV_TARGET
 	float3 diffuseLight = float3(0, 0, 0);
 	float3 specularLight = float3(0, 0, 0);
 	float4 materialColor = shaderTexture.Sample(SampleType, input.tex);
-    clip(materialColor.a - 0.25);
 	if (effectEnabled)
 	{
+        bool effectAlpha = effectPercentage > 1.f;
+        float percentage = effectPercentage;
+        if (effectAlpha) percentage -= 1.f;
+        if (effectEnabled && !effectAlpha) clip(materialColor.a - 0.25);
 		float dist = sqrt((input.tex.x - 0.5f) * (input.tex.x - 0.5f) + (input.tex.y - 0.5f) * (input.tex.y - 0.5f)) / sqrt(0.5f);
-		if (dist < effectPercentage)
+        if (dist < percentage)
 		{
-			float alphaMultiplier = (effectPercentage - dist) / 0.2f;
+            float alphaMultiplier = (percentage - dist) / 0.2f;
 			if (alphaMultiplier > 1)
 				alphaMultiplier = 1.f;
 			float4 effectColor = additionalTexture.Sample(SampleType, input.tex);
+            float effectA = effectColor.a;
 			materialColor = effectColor * (effectColor.a * alphaMultiplier) + materialColor * (1 - effectColor.a * alphaMultiplier);
+            if (effectAlpha)
+			{
+                materialColor.a = effectA * alphaMultiplier;
+                if (materialColor.a > 1.0) materialColor.a = 1.0;
+			}
 		}
 	}
 	if (input.light.w > 0)

+ 46 - 16
FactoryCraft/DX11CustomVertexShader.hlsl

@@ -16,12 +16,19 @@ cbuffer Kamera : register(b1)
 cbuffer LightController : register(b2)
 {
     uint lightLength;
+    float dayLightFactor;
 }
 
-cbuffer Light : register(b3)
+// stores the light for two verticies
+struct VertexLight
 {
-    uint4 light[6];
-}
+    uint dayLight1;
+    uint dynamicLight1;
+    uint dayLight2;
+    uint dynamicLight2;
+};
+
+StructuredBuffer<VertexLight> lightBuffer : register(t0);
 
 //////////////
 // TYPEDEFS //
@@ -66,24 +73,47 @@ PixelInputType TextureVertexShader(VertexInputType input)
     output.position = mul(output.worldPos, view);
     output.position = mul(output.position, projection);
     output.light = float4(1.0f, 1.0f, 1.0f, 0.f);
+    uint dayLight;
+    uint dynamicLight;
     if (lightLength == 1)
     {
-        output.light.x = ((((uint[4])light[0])[0] >> 24) & 0xFF) / 255.f;
-        output.light.y = ((((uint[4])light[0])[0] >> 16) & 0xFF) / 255.f;
-        output.light.z = ((((uint[4])light[0])[0] >> 8) & 0xFF) / 255.f;
-        output.light.w = 1.f;
+        dayLight = lightBuffer[0].dayLight1;
+        dynamicLight = lightBuffer[0].dynamicLight1;
     }
     else if (input.id < lightLength)
     {
-        output.light.x
-            = ((((uint[4])light[input.id / 4])[input.id % 4] >> 24) & 0xFF)
-            / 255.f;
-        output.light.y
-            = ((((uint[4])light[input.id / 4])[input.id % 4] >> 16) & 0xFF)
-            / 255.f;
-        output.light.z
-            = ((((uint[4])light[input.id / 4])[input.id % 4] >> 8) & 0xFF)
-            / 255.f;
+        if (input.id % 2 == 0)
+        {
+            dayLight = lightBuffer[input.id / 2].dayLight1;
+            dynamicLight = lightBuffer[input.id / 2].dynamicLight1;
+        }
+        else
+        {
+            dayLight = lightBuffer[input.id / 2].dayLight2;
+            dynamicLight = lightBuffer[input.id / 2].dynamicLight2;
+        }
+    }
+    if (lightLength > 0)
+    {
+        output.light.x = (((dayLight >> 24) & 0xFF) / 255.f) * dayLightFactor;
+        output.light.y = (((dayLight >> 16) & 0xFF) / 255.f) * dayLightFactor;
+        output.light.z = (((dayLight >> 8) & 0xFF) / 255.f) * dayLightFactor;
+        float3 dynamicLightResult;
+        dynamicLightResult.x = ((dynamicLight >> 24) & 0xFF) / 255.f;
+        dynamicLightResult.y = ((dynamicLight >> 16) & 0xFF) / 255.f;
+        dynamicLightResult.z = ((dynamicLight >> 8) & 0xFF) / 255.f;
+        if (dynamicLightResult.x > output.light.x)
+        {
+            output.light.x = dynamicLightResult.x;
+        }
+        if (dynamicLightResult.y > output.light.y)
+        {
+            output.light.y = dynamicLightResult.y;
+        }
+        if (dynamicLightResult.z > output.light.z)
+        {
+            output.light.z = dynamicLightResult.z;
+        }
         output.light.w = 1.f;
     }
 

+ 9 - 3
FactoryCraft/Dimension.cpp

@@ -49,10 +49,12 @@ void Dimension::api(char* message)
         {
             int cX = *(int*)(message + 1);
             int cY = *(int*)(message + 5);
+            uiFactory.initParam.bildschirm->lock();
             cs.lock();
             Chunk* ch = zChunk(Punkt(cX, cY));
             if (ch) ch->api(message + 9);
             cs.unlock();
+            uiFactory.initParam.bildschirm->unlock();
             break;
         }
     case 2: // entity
@@ -85,14 +87,15 @@ void Dimension::api(char* message)
                       << "\n";
             ZeitMesser zm;
             zm.messungStart();
+            World::INSTANCE->lockWorld();
             cs.lock();
-            Chunk* chunk = new Chunk(center);
-            chunk->load(&reader);
+            Chunk* chunk = new Chunk(center, &reader);
             zm.messungEnde();
             std::cout << "chunk loading took " << zm.getSekunden()
                       << " seconds\n";
             setChunk(chunk, center);
             cs.unlock();
+            World::INSTANCE->unlockWorld();
             World::INSTANCE->onChunkAdded(center);
             break;
         }
@@ -210,7 +213,9 @@ void Dimension::removeDistantChunks(Punkt wPos)
     int index = 0;
     for (Chunk* chunk : chunkList)
     {
-        if ((chunk->getCenter() - wPos).getLength() > MAX_VIEW_DISTANCE * 3)
+        if (abs(chunk->getCenter().x - wPos.x) > MAX_VIEW_DISTANCE + CHUNK_SIZE
+            || abs(chunk->getCenter().y - wPos.y)
+                   > MAX_VIEW_DISTANCE + CHUNK_SIZE)
             removed.add(index, 0);
         index++;
     }
@@ -219,6 +224,7 @@ void Dimension::removeDistantChunks(Punkt wPos)
         cs.lock();
         Chunk* chunk = chunkList.get(i);
         World::INSTANCE->setVisibility(chunk, 0);
+        chunk->destroy();
         setChunk(0, chunk->getCenter());
         cs.unlock();
     }

+ 11 - 0
FactoryCraft/Dimension.h

@@ -39,4 +39,15 @@ public:
     Entity* getEntity(int id);
     void removeEntity(int id);
     int getId() const;
+
+    inline static Framework::Vec3<int> chunkCoordinates(
+        Framework::Vec3<int> worldLocation)
+    {
+        Framework::Vec3<int> result = worldLocation;
+        result.x = result.x % CHUNK_SIZE;
+        result.y = result.y % CHUNK_SIZE;
+        if (result.x < 0) result.x += CHUNK_SIZE;
+        if (result.y < 0) result.y += CHUNK_SIZE;
+        return result;
+    }
 };

+ 1 - 1
FactoryCraft/Entity.cpp

@@ -11,7 +11,7 @@ Entity::Entity(const EntityType* zType,
     int id,
     Framework::Vec3<float> position,
     float maxMovementSpeed)
-    : Model3D(),
+    : FactoryCraftModel(),
       id(id),
       zType(zType),
       playerControlled(0),

+ 2 - 1
FactoryCraft/Entity.h

@@ -6,6 +6,7 @@
 
 #include "Area.h"
 #include "EntityType.h"
+#include "FactoryCraftModel.h"
 
 class Block;
 
@@ -17,7 +18,7 @@ struct MovementFrame
     double duration = 0;
 };
 
-class Entity : public Framework::Model3D
+class Entity : public FactoryCraftModel
 {
 private:
     int id;

+ 2 - 0
FactoryCraft/FactoryCraft.vcxproj

@@ -195,6 +195,7 @@ copy "..\..\..\..\..\Allgemein\Network\x64\Release\Network.dll" "network.dll"</C
     <ClCompile Include="EntityType.cpp" />
     <ClCompile Include="Equipment.cpp" />
     <ClCompile Include="FactoryClient.cpp" />
+    <ClCompile Include="FactoryCraftModel.cpp" />
     <ClCompile Include="Game.cpp" />
     <ClCompile Include="Globals.cpp" />
     <ClCompile Include="Initialisierung.cpp" />
@@ -248,6 +249,7 @@ copy "..\..\..\..\..\Allgemein\Network\x64\Release\Network.dll" "network.dll"</C
     <ClInclude Include="EntityType.h" />
     <ClInclude Include="Equipment.h" />
     <ClInclude Include="FactoryClient.h" />
+    <ClInclude Include="FactoryCraftModel.h" />
     <ClInclude Include="Game.h" />
     <ClInclude Include="Globals.h" />
     <ClInclude Include="Initialisierung.h" />

+ 9 - 0
FactoryCraft/FactoryCraft.vcxproj.filters

@@ -65,6 +65,9 @@
     <Filter Include="graphics\animations">
       <UniqueIdentifier>{4c7b207a-85f2-470f-9e27-42ea57c0cde9}</UniqueIdentifier>
     </Filter>
+    <Filter Include="graphics\models">
+      <UniqueIdentifier>{297bb4e2-25ec-423c-a588-7c8c1134d052}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Main.cpp">
@@ -217,6 +220,9 @@
     <ClCompile Include="BlockAnimation.cpp">
       <Filter>graphics\animations</Filter>
     </ClCompile>
+    <ClCompile Include="FactoryCraftModel.cpp">
+      <Filter>graphics\models</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Area.h">
@@ -375,6 +381,9 @@
     <ClInclude Include="BlockAnimation.h">
       <Filter>graphics\animations</Filter>
     </ClInclude>
+    <ClInclude Include="FactoryCraftModel.h">
+      <Filter>graphics\models</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <FxCompile Include="DX11CustomVertexShader.hlsl">

+ 146 - 0
FactoryCraft/FactoryCraftModel.cpp

@@ -0,0 +1,146 @@
+#include "FactoryCraftModel.h"
+
+#include <Shader.h>
+
+#include "CustomDX11API.h"
+#include "Globals.h"
+#include "World.h"
+
+FactoryCraftModel::FactoryCraftModel()
+    : Model3D()
+{
+    vertexLightBuffer = 0;
+    lightBuffer = 0;
+    vertexLightBufferCount = 0;
+    visible = 1;
+    destroyedState = 0;
+    breakTextur
+        = uiFactory.initParam.bildschirm->zGraphicsApi()->createOrGetTextur(
+            "blocks.ltdb/crack.png", 0);
+    effectAlpha = 0;
+}
+
+FactoryCraftModel::~FactoryCraftModel()
+{
+    breakTextur->release();
+    if (vertexLightBuffer) vertexLightBuffer->release();
+    delete[] lightBuffer;
+}
+
+struct TexturEffect
+{
+    bool enabled;
+    float percentage;
+};
+
+
+void FactoryCraftModel::beforeRender(Framework::GraphicsApi* api,
+    Framework::Shader* zVertexShader,
+    Framework::Shader* zPixelShader)
+{
+    CustomDX11API* cApi = dynamic_cast<CustomDX11API*>(api);
+    if (cApi)
+    {
+        char buffer[8];
+        *(int*)buffer
+            = vertexLightBufferCount == 0 ? 1 : vertexLightBufferCount;
+        *(float*)(buffer + 4) = World::INSTANCE->getDayLightFactor();
+        zVertexShader->füllConstBuffer(
+            buffer, cApi->getVertexShaderLightBufferIndex(), 8);
+        if (vertexLightBuffer)
+        {
+            cApi->setVertexLightBuffer(vertexLightBuffer);
+        }
+        else
+        {
+            cApi->setVertexLightBuffer(
+                World::INSTANCE->zFallbackVertexLightBuffer());
+        }
+        if (destroyedState > 0 && effectAlpha)
+        {
+            TexturEffect e = {1, 1.f + destroyedState};
+            zPixelShader->füllConstBuffer(
+                (char*)&e, 3, sizeof(TexturEffect));
+        }
+    }
+}
+
+void FactoryCraftModel::afterRender(Framework::GraphicsApi* api,
+    Framework::Shader* zVertexShader,
+    Framework::Shader* zPixelShader)
+{
+    CustomDX11API* cApi = dynamic_cast<CustomDX11API*>(api);
+    if (cApi)
+    {
+        char buffer[8];
+        *(int*)buffer = 0;
+        *(float*)(buffer + 4) = World::INSTANCE->getDayLightFactor();
+        zVertexShader->füllConstBuffer(
+            buffer, cApi->getVertexShaderLightBufferIndex(), 8);
+    }
+}
+
+void FactoryCraftModel::setVertexLightBuffer(__int64* data, int vertexCount)
+{
+    if (!vertexLightBuffer)
+    {
+        vertexLightBuffer = uiFactory.initParam.bildschirm->zGraphicsApi()
+                                ->createStructuredBuffer(16);
+    }
+    if (lightBuffer)
+    {
+        delete[] lightBuffer;
+    }
+    lightBuffer = data;
+    vertexLightBufferCount = vertexCount;
+    vertexLightBuffer->setData(data);
+    vertexLightBuffer->setLength(vertexCount * 8);
+    vertexLightBuffer->copieren();
+}
+
+__int64* FactoryCraftModel::zLightBuffer()
+{
+    if (vertexLightBuffer)
+    {
+        vertexLightBuffer->setChanged();
+    }
+    return lightBuffer;
+}
+
+void FactoryCraftModel::copyLightToGPU()
+{
+    if (vertexLightBuffer)
+    {
+        vertexLightBuffer->copieren();
+    }
+}
+
+void FactoryCraftModel::setVisible(bool visible)
+{
+    this->visible = visible;
+}
+
+void FactoryCraftModel::setDestroyedState(float percentage)
+{
+    destroyedState = percentage;
+}
+
+void FactoryCraftModel::setUseEffectAlpha(bool useAlpha)
+{
+    effectAlpha = useAlpha;
+}
+
+bool FactoryCraftModel::needRenderPolygon(int index)
+{
+    return visible;
+}
+
+Textur* FactoryCraftModel::zEffectTextur()
+{
+    return destroyedState > 0 ? breakTextur : 0;
+}
+
+float FactoryCraftModel::getEffectPercentage()
+{
+    return destroyedState;
+}

+ 39 - 0
FactoryCraft/FactoryCraftModel.h

@@ -0,0 +1,39 @@
+#pragma once
+
+#include <DXBuffer.h>
+#include <GraphicsApi.h>
+#include <Model3D.h>
+#include <Textur.h>
+
+class FactoryCraftModel : public Framework::Model3D
+{
+private:
+    Framework::DXBuffer* vertexLightBuffer;
+    __int64* lightBuffer;
+    int vertexLightBufferCount;
+    bool visible;
+    float destroyedState;
+    Framework::Textur* breakTextur;
+    bool effectAlpha;
+
+protected:
+    void beforeRender(Framework::GraphicsApi* api,
+        Framework::Shader* zVertexShader,
+        Framework::Shader* zPixelShader) override;
+    void afterRender(Framework::GraphicsApi* api,
+        Framework::Shader* zVertexShader,
+        Framework::Shader* zPixelShader) override;
+
+public:
+    FactoryCraftModel();
+    ~FactoryCraftModel();
+    void setVertexLightBuffer(__int64* data, int vertexCount);
+    __int64* zLightBuffer();
+    void copyLightToGPU();
+    void setVisible(bool visible);
+    void setDestroyedState(float percentage);
+    void setUseEffectAlpha(bool useAlpha);
+    bool needRenderPolygon(int index) override;
+    Framework::Textur* zEffectTextur() override;
+    float getEffectPercentage() override;
+};

+ 2 - 2
FactoryCraft/Load.cpp

@@ -92,8 +92,8 @@ void createDefaultCube(Bildschirm* zScreen)
 
     data->setVertecies(vertecies, 24);
     // the order of the polygons has to be NORTH (front), EAST (left), SOUTH
-    // (back), WEST (right), TOP, BOTTOM according to the Area definition front
-    // side
+    // (back), WEST (right), TOP, BOTTOM according to the Area definition
+    // front side
     Polygon3D* p
         = new Polygon3D(); // looking from (0,0,0) to (1,0,0) to see this side
     p->indexAnz = 6;

+ 7 - 0
FactoryCraft/Main.cpp

@@ -180,6 +180,13 @@ int KSGStart Framework::Start(Framework::Startparam p)
     rTh.setQuiet(1);
     rTh.setBildschirm(dynamic_cast<Bildschirm*>(screen.getThis()));
 
+    rTh.setTickFunktion([](void* p, void* o, double time) {
+        if (World::INSTANCE)
+        {
+            World::INSTANCE->onTick(time);
+        }
+    });
+
     rTh.beginn();
     StartNachrichtenSchleife();
     rTh.beenden();

+ 10 - 0
FactoryCraft/ModelInfo.cpp

@@ -56,6 +56,16 @@ Framework::Model3DTextur* ModelInfo::getTexture() const
     return textur;
 }
 
+Framework::Text ModelInfo::getModelName() const
+{
+    return modelPath;
+}
+
+const Framework::RCArray<Framework::Text>* ModelInfo::getTexturNames() const
+{
+    return &texturPaths;
+}
+
 bool ModelInfo::isTransparent() const
 {
     return transparent;

+ 2 - 0
FactoryCraft/ModelInfo.h

@@ -21,5 +21,7 @@ public:
 
     Framework::Model3DData* getModel() const;
     Framework::Model3DTextur* getTexture() const;
+    Framework::Text getModelName() const;
+    const Framework::RCArray<Framework::Text>* getTexturNames() const;
     bool isTransparent() const;
 };

+ 82 - 0
FactoryCraft/World.cpp

@@ -11,6 +11,7 @@
 #include "Globals.h"
 #include "Registries.h"
 #include "WorldUpdate.h"
+#include <DX12Buffer.h>
 
 using namespace Network;
 using namespace Framework;
@@ -32,6 +33,29 @@ World::World(Bildschirm3D* zScreen, FactoryClient* client)
     firstMessage = 1;
     ownEntityId = -1;
     currentTarget = 0;
+    dayLightFactor = 1;
+    totalTime = 0;
+    fallbackVertexLightBuffer = zScreen->zGraphicsApi()->createStructuredBuffer(16);
+    char data[16];
+    memset(data, 0, 16);
+    *(int*)data = 0xFFFFFF00;
+    fallbackVertexLightBuffer->setData(data);
+    fallbackVertexLightBuffer->setLength(16);
+    fallbackVertexLightBuffer->copieren();
+    selectionModel = new FactoryCraftModel();
+    selectionModel->setModelDaten(zScreen->zGraphicsApi()->getModel("cube"));
+    selectionModel->setSize(1.005f);
+    selectionModel->setVisible(0);
+    selectionModel->setModelTextur(new Model3DTextur());
+    for (int i = 0; i < 6; i++)
+    {
+        selectionModel->zTextur()->setPolygonTextur(i,
+            zScreen->zGraphicsApi()->createOrGetTextur(
+                "blocks.ltdb/selectedblock.p"));
+    }
+    selectionModel->setAlpha(1);
+    selectionModel->setUseEffectAlpha(1);
+    renderedWorld->addZeichnung(selectionModel);
     start();
 }
 
@@ -215,6 +239,28 @@ void World::update(bool background)
     }
 }
 
+void World::onTick(double time)
+{
+    selectionModel->tick(0.1);
+    totalTime += time;
+    if (totalTime > 50 && totalTime < 60)
+    {
+        dayLightFactor -= (float)time / 11.0f;
+    }
+    else if (totalTime > 60 && totalTime < 70)
+    {
+    }
+    else if (totalTime > 70 && totalTime < 80)
+    {
+        dayLightFactor += (float)time / 11.0f;
+        if (dayLightFactor > 1.0) dayLightFactor = 1.0;
+    }
+    else if (totalTime > 130)
+    {
+        totalTime = 0.0;
+    }
+}
+
 void World::setChunk(Chunk* chunk)
 {
     zScreenPtr->lock();
@@ -348,6 +394,28 @@ void World::setTarget(Framework::Model3D* zTarget)
     if (zTarget != currentTarget)
     {
         targetLock.lock();
+        if (!zTarget)
+        {
+            selectionModel->setVisible(0);
+        }
+        else
+        {
+            selectionModel->setPosition(
+                zTarget->getPos().x, zTarget->getPos().y, zTarget->getPos().z);
+            Block* b = dynamic_cast<Block*>(zTarget);
+            if (b
+                && b->zBlockType()->getModelInfo().getModelName().istGleich(
+                    "cube")
+                && b->getEffectPercentage() > 0)
+            {
+                 selectionModel->setDestroyedState(b->getEffectPercentage());
+            }
+            else
+            {
+                 selectionModel->setDestroyedState(0);
+            }
+            selectionModel->setVisible(1);
+        }
         if (currentTarget)
         {
             currentTarget->setAmbientFactor(
@@ -402,6 +470,11 @@ Framework::Model3D* World::getCurrentTarget() const
              : 0;
 }
 
+FactoryCraftModel* World::zSelectedEffectModel() const
+{
+    return selectionModel;
+}
+
 Chunk* World::zChunk(Punkt center)
 {
     return currentDimension->zChunk(center);
@@ -410,4 +483,13 @@ Chunk* World::zChunk(Punkt center)
 FactoryClient* World::zClient() const
 {
     return client;
+}
+
+float World::getDayLightFactor() const {
+    return dayLightFactor;
+}
+
+Framework::DXBuffer* World::zFallbackVertexLightBuffer()
+{
+    return fallbackVertexLightBuffer;
 }

+ 8 - 0
FactoryCraft/World.h

@@ -24,13 +24,18 @@ private:
     Framework::Model3D* currentTarget;
     Array<Punkt> subscriptions;
     FactoryClient* client;
+    FactoryCraftModel* selectionModel;
     Critical subLock;
     Critical targetLock;
+    float dayLightFactor;
+    double totalTime;
+    Framework::DXBuffer* fallbackVertexLightBuffer;
 
 public:
     World(Framework::Bildschirm3D* zScreen, FactoryClient* client);
     ~World();
     void update(bool background);
+    void onTick(double time);
     void setChunk(Chunk* chunk);
     void thread() override;
 
@@ -52,5 +57,8 @@ public:
     void onChunkAdded(Punkt pos);
     Chunk* zChunk(Punkt center);
     Framework::Model3D* getCurrentTarget() const;
+    FactoryCraftModel* zSelectedEffectModel() const;
     FactoryClient* zClient() const;
+    float getDayLightFactor() const;
+    Framework::DXBuffer* zFallbackVertexLightBuffer();
 };