Browse Source

Render Code in GraphicsApi Klasse ausgelagert, um verschiedene DirectX Versionen unterstützen zu können

Kolja Strohm 5 years ago
parent
commit
4fcb4db963
25 changed files with 1585 additions and 8869 deletions
  1. 12 9
      Bildschirm.cpp
  2. 4 0
      Bildschirm.h
  3. 0 12
      Cube.cpp
  4. 63 87
      DXBuffer.cpp
  5. 24 35
      DXBuffer.h
  6. 26 4
      Framework.vcxproj
  7. 0 6
      Framework.vcxproj.filters
  8. 3 3
      Global.cpp
  9. 343 46
      GraphicsApi.cpp
  10. 68 31
      GraphicsApi.h
  11. 53 30
      Kam3D.cpp
  12. 23 4
      Kam3D.h
  13. 70 79
      Model3D.cpp
  14. 22 22
      Model3D.h
  15. 0 353
      Render3D.cpp
  16. 0 111
      Render3D.h
  17. 61 54
      Textur.cpp
  18. 25 9
      Textur.h
  19. 0 2
      TexturModel.cpp
  20. 495 4440
      UIPixelShader.h
  21. 252 3285
      UIVertexShader.h
  22. 30 225
      Welt3D.cpp
  23. 11 14
      Welt3D.h
  24. 0 5
      Zeichnung3D.cpp
  25. 0 3
      Zeichnung3D.h

+ 12 - 9
Bildschirm.cpp

@@ -9,12 +9,8 @@
 #include "MausEreignis.h"
 #include <iostream>
 #include "Datei.h"
-#include "Zeichnung3D.h"
 #include "Mat3.h"
 #include "Model3D.h"
-#include "Textur.h"
-#include "TexturModel.h"
-#include "TexturList.h"
 #include "GraphicsApi.h"
 #ifdef WIN32
 #include "Kam3D.h"
@@ -23,11 +19,6 @@
 #include <d3d11.h>
 #include <d3d9.h>
 #include "comdef.h"
-#include "DXBuffer.h"
-#include "Shader.h"
-#include "Render3D.h"
-#include "UIPixelShader.h"
-#include "UIVertexShader.h"
 #endif
 
 using namespace Framework;
@@ -323,6 +314,18 @@ double Bildschirm::getRenderZeit() const // gibt zur
     return renderZeit->getSekunden();
 }
 
+// Gibt die Grafik API zurück (ohne erhöhten Reference Counter)
+GraphicsApi *Bildschirm::zGraphicsApi() const
+{
+    return api;
+}
+
+// Gibt die Grafik API zurück
+GraphicsApi *Bildschirm::getGraphicsApi() const
+{
+    return api ? api->getThis() : 0;
+}
+
 // Reference Counting 
 Bildschirm *Bildschirm::getThis()
 {

+ 4 - 0
Bildschirm.h

@@ -165,6 +165,10 @@ namespace Framework
         __declspec( dllexport ) virtual void warteAufRendern() const;
         // Gibt die Zeit in Sekunden zurück, die benötigt wurde, um das letzte Bild zu zeichnen
         __declspec( dllexport ) virtual double getRenderZeit() const;
+        // Gibt die Grafik API zurück (ohne erhöhten Reference Counter)
+        __declspec( dllexport ) GraphicsApi *zGraphicsApi() const;
+        // Gibt die Grafik API zurück
+        __declspec( dllexport ) GraphicsApi *getGraphicsApi() const;
         // Erhöht den Reference Counter um 1
         //  Return: Ein zeiger auf diesen Shader
         __declspec( dllexport ) virtual Bildschirm *getThis();

+ 0 - 12
Cube.cpp

@@ -93,8 +93,6 @@ Cube::Cube( float size )
         Polygon3D *p = new Polygon3D();
         p->indexAnz = 6;
         p->indexList = new int[ p->indexAnz ];
-        p->indexBuffer->setLength( p->indexAnz * 4 );
-        p->indexBuffer->setData( p->indexList );
         p->indexList[ 0 ] = 0;
         p->indexList[ 1 ] = 3;
         p->indexList[ 2 ] = 2;
@@ -106,8 +104,6 @@ Cube::Cube( float size )
         p = new Polygon3D();
         p->indexAnz = 6;
         p->indexList = new int[ p->indexAnz ];
-        p->indexBuffer->setLength( p->indexAnz * 4 );
-        p->indexBuffer->setData( p->indexList );
         p->indexList[ 0 ] = 4;
         p->indexList[ 1 ] = 6;
         p->indexList[ 2 ] = 7;
@@ -119,8 +115,6 @@ Cube::Cube( float size )
         p = new Polygon3D();
         p->indexAnz = 6;
         p->indexList = new int[ p->indexAnz ];
-        p->indexBuffer->setLength( p->indexAnz * 4 );
-        p->indexBuffer->setData( p->indexList );
         p->indexList[ 0 ] = 1 + 8;
         p->indexList[ 1 ] = 7 + 8;
         p->indexList[ 2 ] = 3 + 8;
@@ -132,8 +126,6 @@ Cube::Cube( float size )
         p = new Polygon3D();
         p->indexAnz = 6;
         p->indexList = new int[ p->indexAnz ];
-        p->indexBuffer->setLength( p->indexAnz * 4 );
-        p->indexBuffer->setData( p->indexList );
         p->indexList[ 0 ] = 0 + 8;
         p->indexList[ 1 ] = 2 + 8;
         p->indexList[ 2 ] = 6 + 8;
@@ -145,8 +137,6 @@ Cube::Cube( float size )
         p = new Polygon3D();
         p->indexAnz = 6;
         p->indexList = new int[ p->indexAnz ];
-        p->indexBuffer->setLength( p->indexAnz * 4 );
-        p->indexBuffer->setData( p->indexList );
         p->indexList[ 0 ] = 4 + 16;
         p->indexList[ 1 ] = 1 + 16;
         p->indexList[ 2 ] = 0 + 16;
@@ -158,8 +148,6 @@ Cube::Cube( float size )
         p = new Polygon3D();
         p->indexAnz = 6;
         p->indexList = new int[ p->indexAnz ];
-        p->indexBuffer->setLength( p->indexAnz * 4 );
-        p->indexBuffer->setData( p->indexList );
         p->indexList[ 0 ] = 6 + 16;
         p->indexList[ 1 ] = 2 + 16;
         p->indexList[ 2 ] = 3 + 16;

+ 63 - 87
DXBuffer.cpp

@@ -1,7 +1,6 @@
 #include "DXBuffer.h"
 #include <iostream>
 #ifdef WIN32
-#include "Render3D.h"
 #include <d3d11.h>
 #endif
 
@@ -14,29 +13,16 @@ using namespace Framework;
 //  eLän: Länge eines einzelnen Elements in Bytes
 DXBuffer::DXBuffer( int eLen )
 {
-#ifdef WIN32
-    buffer = 0;
-    description = new D3D11_BUFFER_DESC();
-    memset( description, 0, sizeof( description ) );
-    description->Usage = D3D11_USAGE_DYNAMIC;
-    description->CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
-#endif
     data = 0;
     changed = 0;
-    altLen = 0;
-    elLem = eLen;
+    len = 0;
+    elLen = eLen;
     ref = 1;
 }
 
 // Destruktor
 DXBuffer::~DXBuffer()
-{
-#ifdef WIN32
-    if( buffer )
-        buffer->Release();
-    delete description;
-#endif
-}
+{}
 
 // Setzt den geändert fläg, so das beim nächsten auruf von 'kopieren' die daten neu kopiert werden
 void DXBuffer::setChanged()
@@ -48,7 +34,7 @@ void DXBuffer::setChanged()
 //  län: Die Länge in Bytes
 void DXBuffer::setLength( int len )
 {
-    description->ByteWidth = len;
+    this->len = len;
     changed = 1;
 }
 
@@ -60,55 +46,16 @@ void DXBuffer::setData( void *data )
     changed = 1;
 }
 
-// Kopiert die Daten in den Buffer, fals sie sich verändert haben
-//  zRObj: Das Objekt, mit dem die Grafikkarte angesprochen wird
-void DXBuffer::copieren( Render3D *zRObj )
-{
-#ifdef WIN32
-    if( !changed || !description->ByteWidth || !data )
-        return;
-    if( description->ByteWidth != altLen )
-    {
-        if( buffer )
-            buffer->Release();
-        buffer = 0;
-    }
-    if( !buffer )
-    {
-        D3D11_SUBRESOURCE_DATA ini;
-        memset( &ini, 0, sizeof( ini ) );
-        ini.pSysMem = data;
-
-        zRObj->zDevice()->CreateBuffer( description, &ini, &buffer );
-        altLen = description->ByteWidth;
-    }
-    else if( changed )
-    {
-        D3D11_MAPPED_SUBRESOURCE map;
-        zRObj->zContext()->Map( buffer, 0, D3D11_MAP::D3D11_MAP_WRITE_DISCARD, 0, &map );
-        memcpy( map.pData, data, description->ByteWidth );
-        zRObj->zContext()->Unmap( buffer, 0 );
-        changed = 0;
-    }
-#endif
-}
-
 // Gibt die Länge eines Elementes in bytes zurück
 int DXBuffer::getElementLength() const
 {
-    return elLem;
-}
-#ifdef WIN32
-// Gibt den Buffer zurück
-ID3D11Buffer *DXBuffer::zBuffer() const
-{
-    return buffer;
+    return elLen;
 }
-#endif
+
 // Gibt die Anzahl der Elemente im Buffer zurück
 int DXBuffer::getElementAnzahl() const
 {
-    return altLen / elLem;
+    return len / elLen;
 }
 
 // Erhöht den Reference Counting Zähler.
@@ -130,49 +77,78 @@ DXBuffer *DXBuffer::release()
 }
 
 
+#ifdef WIN32
 // Inhalt der DXVertexBuffer Klasse
 
 // Konstruktor
 // eSize: Die Länge eines Elementes in Bytes
-DXVertexBuffer::DXVertexBuffer( int eSize )
+DX11Buffer::DX11Buffer( int eSize, ID3D11Device *device, ID3D11DeviceContext *context, int bindFlags )
     : DXBuffer( eSize )
 {
-#ifdef WIN32
-    description->BindFlags = D3D11_BIND_VERTEX_BUFFER;
-#endif
+    buffer = 0;
+    description = new D3D11_BUFFER_DESC();
+    memset( description, 0, sizeof( description ) );
+    description->Usage = D3D11_USAGE_DYNAMIC;
+    description->CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+    description->BindFlags = bindFlags;
+
+    this->device = device;
+    this->context = context;
 }
 
 // Destruktor
-DXVertexBuffer::~DXVertexBuffer()
-{}
+DX11Buffer::~DX11Buffer()
+{
+    if( buffer )
+        buffer->Release();
+    delete description;
+}
 
+// Kopiert die Daten in den Buffer, fals sie sich verändert haben
+//  zRObj: Das Objekt, mit dem die Grafikkarte angesprochen wird
+void DX11Buffer::copieren()
+{
+    if( !changed || !len || !data )
+        return;
+    if( description->ByteWidth != (unsigned)len )
+    {
+        if( buffer )
+            buffer->Release();
+        buffer = 0;
+    }
+    if( !buffer )
+    {
+        D3D11_SUBRESOURCE_DATA ini;
+        memset( &ini, 0, sizeof( ini ) );
+        ini.pSysMem = data;
+        description->ByteWidth = len;
 
-// Inhalt der DXIndexBuffer Klasse
+        device->CreateBuffer( description, &ini, &buffer );
+    }
+    else if( changed )
+    {
+        D3D11_MAPPED_SUBRESOURCE map;
+        context->Map( buffer, 0, D3D11_MAP::D3D11_MAP_WRITE_DISCARD, 0, &map );
+        memcpy( map.pData, data, len );
+        context->Unmap( buffer, 0 );
+        changed = 0;
+    }
+}
 
-// Konstruktor
-// eSize: Die Länge eines Elementes in Bytes
-DXIndexBuffer::DXIndexBuffer( int eSize )
-    : DXBuffer( eSize )
+// Gibt den Buffer zurück
+ID3D11Buffer *DX11Buffer::zBuffer() const
 {
-#ifdef WIN32
-    description->BindFlags = D3D11_BIND_INDEX_BUFFER;
-#endif
+    return buffer;
 }
 
-// Destruktor
-DXIndexBuffer::~DXIndexBuffer()
-{}
-
 
-#ifdef WIN32
 // Inhalt der DXStructuredBuffer Klasse
 
 // Konstruktor
 // eSize: Die Länge eines Elementes in Bytes
-DXStructuredBuffer::DXStructuredBuffer( int eSize )
-    : DXBuffer( eSize )
+DX11StructuredBuffer::DX11StructuredBuffer( int eSize, ID3D11Device *device, ID3D11DeviceContext *context )
+    : DX11Buffer( eSize, device, context, D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE )
 {
-    description->BindFlags = D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE;
     description->MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
     description->StructureByteStride = eSize;
     description->Usage = D3D11_USAGE_DEFAULT;
@@ -180,7 +156,7 @@ DXStructuredBuffer::DXStructuredBuffer( int eSize )
 }
 
 // Destruktor
-DXStructuredBuffer::~DXStructuredBuffer()
+DX11StructuredBuffer::~DX11StructuredBuffer()
 {
     if( view )
         view->Release();
@@ -188,10 +164,10 @@ DXStructuredBuffer::~DXStructuredBuffer()
 
 // Kopiert die Daten in den Buffer, fals sie sich verändert haben
 //  zRObj: Das Objekt, mit dem die Grafikkarte angesprochen wird
-void DXStructuredBuffer::copieren( Render3D *zRObj )
+void DX11StructuredBuffer::copieren()
 {
     ID3D11Buffer *old = buffer;
-    DXBuffer::copieren( zRObj );
+    DX11Buffer::copieren();
     if( buffer != old )
     {
         if( view )
@@ -201,12 +177,12 @@ void DXStructuredBuffer::copieren( Render3D *zRObj )
         desc.BufferEx.FirstElement = 0;
         desc.Format = DXGI_FORMAT_UNKNOWN;
         desc.BufferEx.NumElements = description->ByteWidth / description->StructureByteStride;
-        zRObj->zDevice()->CreateShaderResourceView( buffer, &desc, &view );
+        device->CreateShaderResourceView( buffer, &desc, &view );
     }
 }
 
 // Gibt die verwendtete Shader Resource View zurück
-DXStructuredBuffer::operator ID3D11ShaderResourceView *( ) const
+DX11StructuredBuffer::operator ID3D11ShaderResourceView *( ) const
 {
     return view;
 }

+ 24 - 35
DXBuffer.h

@@ -6,6 +6,8 @@
 struct ID3D11Buffer;
 struct D3D11_BUFFER_DESC;
 struct ID3D11ShaderResourceView;
+struct ID3D11Device;
+struct ID3D11DeviceContext;
 #endif
 
 namespace Framework
@@ -15,18 +17,12 @@ namespace Framework
     // Eine Schnittstelle zwischen dem Arbeitsspeicher und dem Grafikspeicher
     class DXBuffer
     {
-    private:
+    protected:
         void *data;
         bool changed;
-        int altLen;
-        int elLem;
-
-    protected:
+        int len;
+        int elLen;
         int ref;
-#ifdef WIN32
-        D3D11_BUFFER_DESC *description;
-        ID3D11Buffer *buffer;
-#endif
 
     public:
         // Konstruktor
@@ -44,14 +40,9 @@ namespace Framework
         //  data: Ein zeiger auf die Daten
         __declspec( dllexport ) void setData( void *data );
         // Kopiert die Daten in den Buffer, fals sie sich verändert haben
-        //  zRObj: Das Objekt, mit dem die Grafikkarte angesprochen wird
-        __declspec( dllexport ) virtual void copieren( Render3D *zRObj );
+        __declspec( dllexport ) virtual void copieren() = 0;
         // Gibt die Länge eines Elementes in bytes zurück
         __declspec( dllexport ) int getElementLength() const;
-#ifdef WIN32
-        // Gibt den Buffer zurück
-        __declspec( dllexport ) ID3D11Buffer *zBuffer() const;
-#endif
         // Gibt die Anzahl der Elemente im Buffer zurück
         __declspec( dllexport ) int getElementAnzahl() const;
         // Erhöht den Reference Counting Zähler.
@@ -62,44 +53,42 @@ namespace Framework
         __declspec( dllexport ) virtual DXBuffer *release();
     };
 
+#ifdef WIN32
     // Ein Buffer von Eckpunkten eines 3D Models
-    class DXVertexBuffer : public DXBuffer
+    class DX11Buffer : public DXBuffer
     {
+    protected:
+        D3D11_BUFFER_DESC *description;
+        ID3D11Buffer *buffer;
+        ID3D11Device *device;
+        ID3D11DeviceContext *context;
     public:
         // Konstruktor
         // eSize: Die Länge eines Elementes in Bytes
-        __declspec( dllexport ) DXVertexBuffer( int eSize );
+        __declspec( dllexport ) DX11Buffer( int eSize, ID3D11Device *device, ID3D11DeviceContext *context, int bindFlags );
         // Destruktor
-        __declspec( dllexport ) virtual ~DXVertexBuffer();
+        __declspec( dllexport ) virtual ~DX11Buffer();
+        // Kopiert die Daten in den Buffer, fals sie sich verändert haben
+        __declspec( dllexport ) void copieren() override;
+        // Gibt den Buffer zurück
+        __declspec( dllexport ) ID3D11Buffer *zBuffer() const;
     };
 
     // Ein Buffer von Indizes aus dem Buffer mit Eckpunkten, wovon immer drei ein Dreieck ergeben, das gezeichnet wird
-    class DXIndexBuffer : public DXBuffer
-    {
-    public:
-        // Konstruktor
-        // eSize: Die Länge eines Elementes in Bytes
-        __declspec( dllexport ) DXIndexBuffer( int eSize );
-        // Destruktor
-        __declspec( dllexport ) virtual ~DXIndexBuffer();
-    };
-#ifdef WIN32
-    // Ein Buffer von Indizes aus dem Buffer mit Eckpunkten, wovon immer drei ein Dreieck ergeben, das gezeichnet wird
-    class DXStructuredBuffer : public DXBuffer
+    class DX11StructuredBuffer : public DX11Buffer
     {
     private:
         ID3D11ShaderResourceView *view;
     public:
         // Konstruktor
         // eSize: Die Länge eines Elementes in Bytes
-        __declspec( dllexport ) DXStructuredBuffer( int eSize );
+        __declspec( dllexport ) DX11StructuredBuffer( int eSize, ID3D11Device *device, ID3D11DeviceContext *context );
+        // Destruktor
+        __declspec( dllexport ) virtual ~DX11StructuredBuffer();
         // Kopiert die Daten in den Buffer, fals sie sich verändert haben
-        //  zRObj: Das Objekt, mit dem die Grafikkarte angesprochen wird
-        __declspec( dllexport ) void copieren( Render3D *zRObj ) override;
+        __declspec( dllexport ) void copieren() override;
         // Gibt die verwendtete Shader Resource View zurück
         __declspec( dllexport ) operator ID3D11ShaderResourceView *() const;
-        // Destruktor
-        __declspec( dllexport ) virtual ~DXStructuredBuffer();
     };
 #endif
 }

+ 26 - 4
Framework.vcxproj

@@ -157,7 +157,7 @@ copy "x64\Debug\Framework.dll" "..\..\Spiele Platform\Klient\Fertig\Debug\x64\fr
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>d3dcompiler.lib;d3d9.lib;d3d11.lib;DXGI.lib;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>d3dcompiler.lib;d3d11.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <CustomBuildStep>
       <Command>copy "Release\Framework.dll" "..\..\Spiele Platform\Klient\Fertig\x32\framework.dll"
@@ -184,7 +184,7 @@ copy "Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x32\framework.dll
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>d3dcompiler.lib;d3d9.lib;d3d11.lib;DXGI.lib;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>d3dcompiler.lib;d3d11.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <CustomBuildStep>
       <Command>copy "x64\Release\Framework.dll" "..\..\Spiele Platform\Klient\Fertig\x64\framework.dll"
@@ -243,7 +243,6 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
     <ClInclude Include="Reader.h" />
     <ClInclude Include="Rect2.h" />
     <ClInclude Include="ReferenceCounting.h" />
-    <ClInclude Include="Render3D.h" />
     <ClInclude Include="Shader.h" />
     <ClInclude Include="Textur.h" />
     <ClInclude Include="Textur2D.h" />
@@ -314,7 +313,6 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
     <ClCompile Include="Model3D.cpp" />
     <ClCompile Include="Model3DList.cpp" />
     <ClCompile Include="Random.cpp" />
-    <ClCompile Include="Render3D.cpp" />
     <ClCompile Include="Shader.cpp" />
     <ClCompile Include="Textur.cpp" />
     <ClCompile Include="Textur2D.cpp" />
@@ -359,6 +357,18 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
       <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">5.0</ShaderModel>
       <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">UIPixelShader</VariableName>
       <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">UIPixelShader.h</HeaderFileOutput>
+      <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">TexturePixelShader</EntryPointName>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">UIPixelShader</VariableName>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">UIPixelShader.h</HeaderFileOutput>
+      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">5.0</ShaderModel>
+      <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">TexturePixelShader</EntryPointName>
+      <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">TexturePixelShader</EntryPointName>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">UIPixelShader</VariableName>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">UIPixelShader</VariableName>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">UIPixelShader.h</HeaderFileOutput>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">UIPixelShader.h</HeaderFileOutput>
+      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">5.0</ShaderModel>
+      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">5.0</ShaderModel>
     </FxCompile>
     <FxCompile Include="UIVertexShader.hlsl">
       <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Vertex</ShaderType>
@@ -369,6 +379,18 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
       <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">5.0</ShaderModel>
       <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">UIVertexShader</VariableName>
       <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">UIVertexShader.h</HeaderFileOutput>
+      <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">TextureVertexShader</EntryPointName>
+      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">5.0</ShaderModel>
+      <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">TextureVertexShader</EntryPointName>
+      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">5.0</ShaderModel>
+      <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">TextureVertexShader</EntryPointName>
+      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">5.0</ShaderModel>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">UIVertexShader</VariableName>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">UIVertexShader.h</HeaderFileOutput>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">UIVertexShader</VariableName>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">UIVertexShader.h</HeaderFileOutput>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">UIVertexShader</VariableName>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">UIVertexShader.h</HeaderFileOutput>
     </FxCompile>
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 0 - 6
Framework.vcxproj.filters

@@ -219,9 +219,6 @@
     <ClInclude Include="Welt3D.h">
       <Filter>Headerdateien\Framework\Grafik\3D</Filter>
     </ClInclude>
-    <ClInclude Include="Render3D.h">
-      <Filter>Headerdateien\Framework\Grafik\3D</Filter>
-    </ClInclude>
     <ClInclude Include="Textur.h">
       <Filter>Headerdateien\Framework\Grafik\3D</Filter>
     </ClInclude>
@@ -434,9 +431,6 @@
     <ClCompile Include="Welt3D.cpp">
       <Filter>Quelldateien\Framework\Grafik\3D</Filter>
     </ClCompile>
-    <ClCompile Include="Render3D.cpp">
-      <Filter>Quelldateien\Framework\Grafik\3D</Filter>
-    </ClCompile>
     <ClCompile Include="Kam3D.cpp">
       <Filter>Quelldateien\Framework\Grafik\3D</Filter>
     </ClCompile>

+ 3 - 3
Global.cpp

@@ -20,6 +20,7 @@ void Framework::initFramework( HINSTANCE__ *hInst )
 {
     if( istInitialisiert )
         return;
+    thRegister = new ThreadRegister();
 #ifdef WIN32
     Gdiplus::GdiplusStartupInput gdiplusStartupInput;
     ULONG_PTR gdiplusToken;
@@ -34,7 +35,6 @@ void Framework::initFramework( HINSTANCE__ *hInst )
 	Model3DList::init();
 	m3dRegister = new Model3DList();
 	TexturList::init();
-    thRegister = new ThreadRegister();
     dlls = new DLLRegister();
     logEnabled = 0;
     logFile = 0;
@@ -47,13 +47,13 @@ void Framework::releaseFramework()
     if( !istInitialisiert )
         return;
     thRegister->cleanUpClosedThreads();
-    delete thRegister;
+    dlls->release();
 	m3dRegister->release();
 	Model3DList::destroy();
 	TexturList::destroy();
     if( logFile )
         logFile->release();
-    dlls->release();
+    delete thRegister;
     istInitialisiert = 0;
 }
 

+ 343 - 46
GraphicsApi.cpp

@@ -7,10 +7,12 @@
 #include "Globals.h"
 #include "UIVertexShader.h"
 #include "UIPixelShader.h"
-#include "Render3D.h"
 #include "TexturList.h"
 #include "Kam3D.h"
 #include "DLLRegister.h"
+#include "Welt3D.h"
+#include "Model2D.h"
+#include "DXBuffer.h"
 #include <d3d11.h>
 #include <d3d9.h>
 
@@ -54,9 +56,16 @@ void GraphicsApi::setFullScreen( bool fullScreen )
 void GraphicsApi::beginFrame( bool fill2D, bool fill3D, int fillColor )
 {}
 
-void GraphicsApi::renderKamera( Kam3D *zKamera )
+void GraphicsApi::renderKamera( Kam3D * zKamera )
 {}
 
+Textur *GraphicsApi::createOrGetTextur( const char *name, Bild * b )
+{
+    if( b )
+        b->release();
+    return 0;
+}
+
 GraphicApiType GraphicsApi::getTyp() const
 {
     return typ;
@@ -99,6 +108,7 @@ DirectX9::DirectX9()
 DirectX9::~DirectX9()
 {
     backRect->pBits = NULL;
+    delete backRect;
     if( pBackBuffer )
     {
         pBackBuffer->Release();
@@ -126,8 +136,17 @@ void DirectX9::initialize( WFenster * fenster, Vec2<int> backBufferSize, bool fu
     GraphicsApi::initialize( fenster, backBufferSize, fullScreen );
 
     HINSTANCE dll = getDLLRegister()->ladeDLL( "d3d9.dll", "d3d9.dll" );
+    if( !dll )
+    {
+        WMessageBox( fenster->getFensterHandle(), new Text( "Fehler" ), new Text( "DirectX 9 konnte nicht gefunden werden." ), MB_ICONERROR );
+        return;
+    }
     D3D9CreateFunction direct3DCreate9 = (D3D9CreateFunction)GetProcAddress( dll, "Direct3DCreate9" );
-
+    if( !direct3DCreate9 )
+    {
+        WMessageBox( fenster->getFensterHandle(), new Text( "Fehler" ), new Text( "Der Einstiegspunkt Direct3DCreate9 fon DirectX 9 konnte nicht gefunden werden." ), MB_ICONERROR );
+        return;
+    }
     pDirect3D = direct3DCreate9( D3D_SDK_VERSION );
 
     D3DPRESENT_PARAMETERS d3dpp;
@@ -146,7 +165,7 @@ void DirectX9::initialize( WFenster * fenster, Vec2<int> backBufferSize, bool fu
     uiBild->neuBild( backBufferSize.x, backBufferSize.y, 0xFF000000 );
 
     HRESULT result = pDirect3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, fenster->getFensterHandle(),
-                                      D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE, &d3dpp, &pDevice );
+                                              D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE, &d3dpp, &pDevice );
     if( result != S_OK )
         WMessageBox( fenster->getFensterHandle(), new Text( "Fehler" ), new Text( "DirectX 9 konnte nicht initialisiert werden." ), MB_ICONERROR );
     if( pDevice )
@@ -260,17 +279,32 @@ DirectX11::DirectX11()
     blendStateAlphaBlend( 0 ),
     vp( 0 ),
     texturModel( new TexturModel() ),
-    renderObj( new Render3D() ),
-    texturRegister( new TexturList() )
+    texturRegister( new TexturList() ),
+    texturRS( 0 ),
+    meshRS( 0 ),
+    defaultTextur( 0 ),
+    diffuseLights( 0 ),
+    pointLights( 0 ),
+    vertexBuffer( 0 ),
+    indexBuffer( 0 )
 {}
 
 DirectX11::~DirectX11()
 {
-    if( renderObj )
-    {
-        renderObj->release();
-        renderObj = 0;
-    }
+    if( vertexBuffer )
+        vertexBuffer->release();
+    if( indexBuffer )
+        indexBuffer->release();
+    if( diffuseLights )
+        diffuseLights->release();
+    if( pointLights )
+        pointLights->release();
+    if( defaultTextur )
+        defaultTextur->release();
+    if( texturRS )
+        texturRS->Release();
+    if( meshRS )
+        meshRS->Release();
     texturModel->release();
     texturRegister->release();
     if( blendStateAlphaBlend )
@@ -342,7 +376,7 @@ DirectX11::~DirectX11()
     }
 }
 
-void DirectX11::initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fullScreen )
+void DirectX11::initialize( WFenster * fenster, Vec2<int> backBufferSize, bool fullScreen )
 {
     if( d3d11Device )
         return GraphicsApi::initialize( fenster, backBufferSize, fullScreen );
@@ -382,17 +416,17 @@ void DirectX11::initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fu
     flag |= D3D11_CREATE_DEVICE_DEBUG;
 #endif
     HRESULT result = D3D11CreateDeviceAndSwapChain( NULL,
-                                            D3D_DRIVER_TYPE_HARDWARE,
-                                            NULL,
-                                            flag,
-                                            &featureLevel,
-                                            1,
-                                            D3D11_SDK_VERSION,
-                                            &scd,
-                                            &d3d11SpawChain,
-                                            &d3d11Device,
-                                            &support,
-                                            &d3d11Context );
+                                                    D3D_DRIVER_TYPE_HARDWARE,
+                                                    NULL,
+                                                    flag,
+                                                    &featureLevel,
+                                                    1,
+                                                    D3D11_SDK_VERSION,
+                                                    &scd,
+                                                    &d3d11SpawChain,
+                                                    &d3d11Device,
+                                                    &support,
+                                                    &d3d11Context );
     if( result != S_OK )
     {
         std::cout << "ERROR: D3D11CreateDeviceAndSwapChain returned " << result << "\n";
@@ -578,7 +612,7 @@ void DirectX11::initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fu
     pixelShader->erstelleConstBuffer( d3d11Device, sizeof( float ) * 3, 1 ); // materialkonstanten nach phong model
     pixelShader->erstelleConstBuffer( d3d11Device, sizeof( int ) * 2, 2 ); // materialkonstanten nach phong model
     // TODO: Remove Following Test Code
-    int lc[] = { 1, 6 };
+    int lc[] = { 0, 0 };
     pixelShader->füllConstBuffer( d3d11Context, (char *)lc, 2, sizeof( int ) * 2 );
 
     // Create a texture sampler state description.
@@ -611,9 +645,7 @@ void DirectX11::initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fu
     renderB->setAlpha3D( 1 );
     renderB->neuBild( backBufferSize.x, backBufferSize.y, 0 );
 
-    uiTextur = new Textur();
-    uiTextur->setBildZ( renderB );
-    texturRegister->addTextur( uiTextur->getThis(), "f_Render_Bild" );
+    uiTextur = createOrGetTextur( "_f_Render_Bild", renderB );
 
     texturModel->setSize( backBufferSize );
     texturModel->setTextur( uiTextur->getThis() );
@@ -635,28 +667,96 @@ void DirectX11::initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fu
     d3d11Context->OMSetBlendState( blendStateAlphaBlend, 0, 0xFFFFFFFF );
 
     // Setup Render Objekt
-    if( renderObj )
-        renderObj->release();
-    renderObj = new Render3D();
-    d3d11Device->AddRef();
-    renderObj->setDevice( d3d11Device );
-    d3d11Context->AddRef();
-    renderObj->setContext( d3d11Context );
-
-    renderObj->benutzeShader( VERTEX, vertexShader->getThis() );
+
+    vertexShader->benutzeShader( d3d11Context );
     d3d11Context->PSSetSamplers( 0, 1, &sampleState );
-    renderObj->benutzeShader( PIXEL, pixelShader->getThis() );
+    pixelShader->benutzeShader( d3d11Context );
+
+    D3D11_RASTERIZER_DESC rasterDesc;
+    ZeroMemory( &rasterDesc, sizeof( rasterDesc ) );
+    rasterDesc.AntialiasedLineEnable = false;
+    rasterDesc.CullMode = D3D11_CULL_BACK;
+    rasterDesc.DepthBiasClamp = 0.0f;
+    rasterDesc.DepthClipEnable = true;
+    rasterDesc.FillMode = D3D11_FILL_SOLID;
+    rasterDesc.FrontCounterClockwise = false;
+    rasterDesc.MultisampleEnable = false;
+    rasterDesc.ScissorEnable = false;
+    rasterDesc.SlopeScaledDepthBias = 0.0f;
+    d3d11Device->CreateRasterizerState( &rasterDesc, &texturRS );
+
+    ZeroMemory( &rasterDesc, sizeof( rasterDesc ) );
+    rasterDesc.AntialiasedLineEnable = false;
+    rasterDesc.CullMode = D3D11_CULL_BACK;
+    rasterDesc.DepthBiasClamp = 0.0f;
+    rasterDesc.DepthClipEnable = true;
+    rasterDesc.FillMode = D3D11_FILL_WIREFRAME;
+    rasterDesc.FrontCounterClockwise = false;
+    rasterDesc.MultisampleEnable = false;
+    rasterDesc.ScissorEnable = false;
+    rasterDesc.SlopeScaledDepthBias = 0.0f;
+    d3d11Device->CreateRasterizerState( &rasterDesc, &meshRS );
+
+    d3d11Context->RSSetState( texturRS );
+
+    Bild * b = new Bild();
+    b->neuBild( 10, 10, 0xFFFFFFFF );
+    defaultTextur = createOrGetTextur( "_default_textur", b );
+
+    vertexBuffer = new DX11Buffer( sizeof( Vertex3D ), d3d11Device, d3d11Context, D3D11_BIND_VERTEX_BUFFER );
+    indexBuffer = new DX11Buffer( sizeof( int ), d3d11Device, d3d11Context, D3D11_BIND_INDEX_BUFFER );
+
+    DiffuseLight dl[ 1 ];
+    dl[ 0 ].direction = Vec3< float >( -0.5f, -0.5f, -0.5f ).normalize();
+    dl[ 0 ].color = Vec3<float>( 1.f, 0.f, 0.f );
+    diffuseLights = new DX11StructuredBuffer( sizeof( DiffuseLight ), d3d11Device, d3d11Context );
+    diffuseLights->setData( dl );
+    diffuseLights->setLength( sizeof( dl ) );
+    diffuseLights->copieren();
+    PointLight pl[ 6 ];
+    pl[ 0 ].position = Vec3< float >( 0, 130, 0 );
+    pl[ 0 ].color = Vec3< float >( 1.f, 1.f, 0.f );
+    pl[ 0 ].radius = 100;
+    pl[ 1 ].position = Vec3< float >( 150, 130, 0 );
+    pl[ 1 ].color = Vec3< float >( 0.f, 1.f, 0.f );
+    pl[ 1 ].radius = 100;
+    pl[ 2 ].position = Vec3< float >( 150, 130, 150 );
+    pl[ 2 ].color = Vec3< float >( 0.f, 0.f, 1.f );
+    pl[ 2 ].radius = 100;
+    pl[ 3 ].position = Vec3< float >( -150, 130, 0 );
+    pl[ 3 ].color = Vec3< float >( 1.f, 0.f, 1.f );
+    pl[ 3 ].radius = 100;
+    pl[ 4 ].position = Vec3< float >( 0, 130, 150 );
+    pl[ 4 ].color = Vec3< float >( 0.f, 1.f, 1.f );
+    pl[ 4 ].radius = 100;
+    pl[ 5 ].position = Vec3< float >( -150, 130, 150 );
+    pl[ 5 ].color = Vec3< float >( 1.f, 0.f, 0.f );
+    pl[ 5 ].radius = 100;
+    pointLights = new DX11StructuredBuffer( sizeof( PointLight ), d3d11Device, d3d11Context );
+    pointLights->setData( pl );
+    pointLights->setLength( sizeof( pl ) * 6 );
+    pointLights->copieren();
 }
 
 void DirectX11::update()
 {
-    if( renderObj )
+    if( vertexBuffer )
+        vertexBuffer = (DX11Buffer *)vertexBuffer->release();
+    if( indexBuffer )
+        indexBuffer = (DX11Buffer *)indexBuffer->release();
+    if( texturRS )
     {
-        renderObj->release();
-        renderObj = 0;
+        texturRS->Release();
+        texturRS = NULL;
+    }
+    if( meshRS )
+    {
+        meshRS->Release();
+        meshRS = NULL;
     }
-    texturModel->release();
     texturRegister->leeren();
+    if( defaultTextur )
+        defaultTextur = defaultTextur->release();
     if( blendStateAlphaBlend )
     {
         blendStateAlphaBlend->Release();
@@ -749,9 +849,177 @@ void DirectX11::beginFrame( bool fill2D, bool fill3D, int fillColor )
     d3d11Context->OMSetDepthStencilState( depthStencilState, 1 );
 }
 
-void DirectX11::renderKamera( Kam3D *zKamera )
+void DirectX11::renderObject( Model3D * zObj )
 {
-    zKamera->render( renderObj );
+    vertexBuffer->setData( (void *)zObj->zVertexBuffer() );
+    vertexBuffer->setLength( sizeof( Vertex3D ) * zObj->getVertexAnzahl() );
+    vertexBuffer->copieren();
+    Mat4< float > trans = Mat4< float >::identity();
+    int anz = zObj->errechneMatrizen( trans, matrixBuffer );
+    if( vertexShader )
+        vertexShader->füllConstBuffer( d3d11Context, (char *)matrixBuffer, 0, sizeof( Mat4< float > ) * anz );
+    float matirialBuffer[ 3 ]; // light factors (phong model)
+    matirialBuffer[ 0 ] = zObj->getAmbientFactor();
+    matirialBuffer[ 1 ] = zObj->getDiffusFactor();
+    matirialBuffer[ 2 ] = zObj->getSpecularFactor();
+    if( pixelShader )
+        pixelShader->füllConstBuffer( d3d11Context, (char *)matirialBuffer, 1, sizeof( float ) * 3 );
+    unsigned int offset = 0;
+    unsigned int es = (unsigned)vertexBuffer->getElementLength();
+    ID3D11Buffer * vBuffer = vertexBuffer->zBuffer();
+    d3d11Context->IASetVertexBuffers( 0, 1, &vBuffer, &es, &offset );
+    Model3DTextur * zTextur = zObj->zTextur();
+    int ind = 0;
+    for( auto i = zObj->zModelData()->getPolygons(); i; i++ )
+    {
+        indexBuffer->setData( i->indexList );
+        indexBuffer->setLength( sizeof( int ) * i->indexAnz );
+        indexBuffer->copieren();
+        Textur *t = zTextur->zPolygonTextur( ind );
+        if( t &&t->brauchtUpdate() )
+            t->updateTextur();
+        DXGI_FORMAT f = DXGI_FORMAT_R32_UINT;
+        if( indexBuffer->getElementLength() == 2 )
+            f = DXGI_FORMAT_R16_UINT;
+        if( indexBuffer->getElementLength() == 1 )
+            f = DXGI_FORMAT_R8_UINT;
+        d3d11Context->IASetIndexBuffer( indexBuffer->zBuffer(), f, 0 );
+        d3d11Context->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
+        if( t )
+        {
+            ID3D11ShaderResourceView *v[ 3 ];
+            v[ 0 ] = *(DX11Textur *)t;
+            v[ 1 ] = *diffuseLights;
+            v[ 2 ] = *pointLights;
+            d3d11Context->PSSetShaderResources( 0, 3, v );
+            d3d11Context->DrawIndexed( indexBuffer->getElementAnzahl(), 0, 0 );
+        }
+        else
+        {
+            d3d11Context->RSSetState( meshRS );
+            ID3D11ShaderResourceView *v[ 3 ];
+            v[ 0 ] = *(DX11Textur *)defaultTextur;
+            v[ 1 ] = *diffuseLights;
+            v[ 2 ] = *pointLights;
+            d3d11Context->PSSetShaderResources( 0, 3, v );
+            d3d11Context->DrawIndexed( indexBuffer->getElementAnzahl(), 0, 0 );
+            d3d11Context->RSSetState( texturRS );
+        }
+        ind++;
+    }
+}
+
+// Überprüft, ob eine Kugel in dem Sichtbaren Raum der Welt liegt und gezeichnet werden muss
+//  pos: Der Mittelpunkt der Kugel
+//  radius: Der Radius der Kugel
+//  dist: Einen Zeiger auf einen float, in dem das quadrat des Abstands zur Kammeraposition gespeichert wird, falls diese Funktion true zurückgiebt und der Zeiger nicht 0 ist
+bool DirectX11::isInFrustrum( const Vec3< float > & pos, float radius, float *dist ) const
+{
+    for( int i = 0; i < 6; i++ )
+    {
+        if( frustrum[ i ] * pos + radius < 0 )
+            return 0;
+    }
+    if( dist )
+        * dist = kamPos.abstand( pos );
+    return 1;
+}
+
+void DirectX11::renderKamera( Kam3D * zKamera )
+{
+    d3d11Context->RSSetViewports( 1, (D3D11_VIEWPORT *)zKamera->zViewPort() );
+
+    Mat4< float > tmp = zKamera->getProjectionMatrix() * zKamera->getViewMatrix();
+
+    frustrum[ 0 ].x = tmp.elements[ 3 ][ 0 ] + tmp.elements[ 0 ][ 0 ];
+    frustrum[ 0 ].y = tmp.elements[ 3 ][ 1 ] + tmp.elements[ 0 ][ 1 ];
+    frustrum[ 0 ].z = tmp.elements[ 3 ][ 2 ] + tmp.elements[ 0 ][ 2 ];
+    frustrum[ 0 ].w = tmp.elements[ 3 ][ 3 ] + tmp.elements[ 0 ][ 3 ];
+
+    frustrum[ 1 ].x = tmp.elements[ 3 ][ 0 ] - tmp.elements[ 0 ][ 0 ];
+    frustrum[ 1 ].y = tmp.elements[ 3 ][ 1 ] - tmp.elements[ 0 ][ 1 ];
+    frustrum[ 1 ].z = tmp.elements[ 3 ][ 2 ] - tmp.elements[ 0 ][ 2 ];
+    frustrum[ 1 ].w = tmp.elements[ 3 ][ 3 ] - tmp.elements[ 0 ][ 3 ];
+
+    frustrum[ 2 ].x = tmp.elements[ 3 ][ 0 ] - tmp.elements[ 1 ][ 0 ];
+    frustrum[ 2 ].y = tmp.elements[ 3 ][ 1 ] - tmp.elements[ 1 ][ 1 ];
+    frustrum[ 2 ].z = tmp.elements[ 3 ][ 2 ] - tmp.elements[ 1 ][ 2 ];
+    frustrum[ 2 ].w = tmp.elements[ 3 ][ 3 ] - tmp.elements[ 1 ][ 3 ];
+
+    frustrum[ 3 ].x = tmp.elements[ 3 ][ 0 ] + tmp.elements[ 1 ][ 0 ];
+    frustrum[ 3 ].y = tmp.elements[ 3 ][ 1 ] + tmp.elements[ 1 ][ 1 ];
+    frustrum[ 3 ].z = tmp.elements[ 3 ][ 2 ] + tmp.elements[ 1 ][ 2 ];
+    frustrum[ 3 ].w = tmp.elements[ 3 ][ 3 ] + tmp.elements[ 1 ][ 3 ];
+
+    frustrum[ 4 ].x = tmp.elements[ 2 ][ 0 ];
+    frustrum[ 4 ].y = tmp.elements[ 2 ][ 1 ];
+    frustrum[ 4 ].z = tmp.elements[ 2 ][ 2 ];
+    frustrum[ 4 ].w = tmp.elements[ 2 ][ 3 ];
+
+    frustrum[ 5 ].x = tmp.elements[ 3 ][ 0 ] - tmp.elements[ 2 ][ 0 ];
+    frustrum[ 5 ].y = tmp.elements[ 3 ][ 1 ] - tmp.elements[ 2 ][ 1 ];
+    frustrum[ 5 ].z = tmp.elements[ 3 ][ 2 ] - tmp.elements[ 2 ][ 2 ];
+    frustrum[ 5 ].w = tmp.elements[ 3 ][ 3 ] - tmp.elements[ 2 ][ 3 ];
+
+    for( int i = 0; i < 6; i++ )
+        frustrum[ i ].normalize();
+
+    viewAndProj[ 0 ] = zKamera->getViewMatrix();
+    viewAndProj[ 1 ] = zKamera->getProjectionMatrix();
+    kamPos = zKamera->getWorldPosition();
+    if( vertexShader )
+        vertexShader->füllConstBuffer( d3d11Context, (char *)viewAndProj, 1, sizeof( Mat4< float > ) * 2 );
+    if( pixelShader )
+        pixelShader->füllConstBuffer( d3d11Context, (char *)& kamPos, 0, sizeof( float ) * 3 );
+    Welt3D * w = zKamera->zWelt();
+    w->lock();
+    int alphaAnzahl = 0;
+    int maxDist = 0;
+    int minDist = 0x7FFFFFFF;
+    for( auto obj = w->getMembers(); obj; obj++ )
+    {
+        float dist;
+        if( isInFrustrum( obj->getPos(), obj->getRadius(), &dist ) )
+        {
+            if( (int)dist > maxDist )
+                maxDist = (int)dist;
+            if( minDist < (int)dist )
+                minDist = (int)dist;
+            if( obj->hatAlpha() )
+                alphaAnzahl++;
+            else
+                renderObject( obj._ );
+        }
+    }
+    maxDist++;
+    if( alphaAnzahl )
+    {
+        int size = maxDist - minDist;
+        int *index = new int[ size ];
+        Model3D **sorted = new Model3D * [ size * alphaAnzahl ];
+        for( auto obj = w->getMembers(); obj; obj++ )
+        {
+            float dist;
+            if( isInFrustrum( obj->getPos(), obj->getRadius(), &dist ) )
+            {
+                if( obj->hatAlpha() )
+                {
+                    int pos = (int)dist - minDist;
+                    sorted[ pos * alphaAnzahl + index[ pos ]++ ] = obj._;
+                }
+            }
+        }
+        for( int i = 0; i < size; i++ )
+        {
+            for( int j = 0; j < index[ i ]; j++ )
+            {
+                renderObject( sorted[ i * alphaAnzahl + j ] );
+            }
+        }
+        delete[] index;
+        delete[] sorted;
+    }
+    w->unlock();
 }
 
 void DirectX11::presentFrame()
@@ -759,15 +1027,22 @@ void DirectX11::presentFrame()
     // Set the depth stencil state.
     d3d11Context->OMSetDepthStencilState( depthDisabledStencilState, 1 );
 
-    uiTextur->updateTextur( renderObj );
+    uiTextur->updateTextur();
 
     d3d11Context->RSSetViewports( 1, vp );
 
     float screenAspect = (float)backBufferSize.x / (float)backBufferSize.y;
     Mat4< float > view = view.translation( Vec3< float >( 0.f, 0.f, backBufferSize.y * 1.2075f ) );
-    renderObj->setKameraMatrix( view, view.projektion( (float)PI / 4.0f, screenAspect, 0.1f, 10000.f ), Vec3< float >( 0.f, 0.f, backBufferSize.y * 1.2075f ) );
+    viewAndProj[ 0 ] = view;
+    viewAndProj[ 1 ] = view.projektion( (float)PI / 4.0f, screenAspect, 0.1f, 10000.f );
+    kamPos = Vec3< float >( 0.f, 0.f, backBufferSize.y * 1.2075f );
+    if( vertexShader )
+        vertexShader->füllConstBuffer( d3d11Context, (char *)viewAndProj, 1, sizeof( Mat4< float > ) * 2 );
+    if( pixelShader )
+        pixelShader->füllConstBuffer( d3d11Context, (char *)& kamPos, 0, sizeof( float ) * 3 );
+    
     if( fenster && !IsIconic( fenster->getFensterHandle() ) )
-        texturModel->render( renderObj );
+        renderObject( texturModel );
 
     HRESULT result = d3d11SpawChain->Present( 0, 0 );
     if( !SUCCEEDED( result ) )
@@ -780,4 +1055,26 @@ void DirectX11::presentFrame()
 Bild *DirectX11::zUIRenderBild() const
 {
     return uiTextur->zBild();
+}
+
+Textur *DirectX11::createOrGetTextur( const char *name, Bild * b )
+{
+    if( !d3d11Device )
+    {
+        if( b )
+            b->release();
+        return 0;
+    }
+    if( texturRegister->hatTextur( name ) )
+    {
+        Textur *ret = texturRegister->getTextur( name );
+        if( b )
+            ret->setBildZ( b );
+        return ret;
+    }
+    Textur *ret = new DX11Textur( d3d11Device, d3d11Context );
+    if( b )
+        ret->setBildZ( b );
+    texturRegister->addTextur( ret->getThis(), name );
+    return ret;
 }

+ 68 - 31
GraphicsApi.h

@@ -1,6 +1,8 @@
 #pragma once
 
 #include "Vec2.h"
+#include "Mat4.h"
+#include "Ebene3D.h"
 
 // DirectX 11 Types
 
@@ -35,6 +37,9 @@ namespace Framework
     class Render3D;
     class TexturList;
     class Kam3D;
+    class Model3D;
+    class DX11Buffer;
+    class DX11StructuredBuffer;
 
     enum GraphicApiType
     {
@@ -44,6 +49,19 @@ namespace Framework
         DIRECTX12 // 3d phong model with raytraycing
     };
 
+    struct DiffuseLight
+    {
+        Vec3<float> direction;
+        Vec3<float> color;
+    };
+
+    struct PointLight
+    {
+        Vec3<float> position;
+        Vec3<float> color;
+        float radius;
+    };
+
     class GraphicsApi
     {
     protected:
@@ -56,21 +74,22 @@ namespace Framework
         int ref;
 
     public:
-        GraphicsApi( GraphicApiType typ );
-        virtual ~GraphicsApi();
-        virtual void initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fullScreen );
-        virtual void setBackBufferSize( Vec2< int > size );
-        virtual void setFullScreen( bool fullScreen );
-        virtual void update() = 0;
-        virtual void beginFrame( bool fill2D = 0, bool fill3D = 0, int fillColor = 0 );
-        virtual void renderKamera( Kam3D *zKamera );
-        virtual void presentFrame() = 0;
-        GraphicApiType getTyp() const;
-        Vec2< int > getBackBufferSize() const;
-        bool isFullScreen() const;
-        virtual Bild *zUIRenderBild() const = 0;
-        GraphicsApi *getThis();
-        GraphicsApi *release();
+        __declspec( dllexport ) GraphicsApi( GraphicApiType typ );
+        __declspec( dllexport ) virtual ~GraphicsApi();
+        __declspec( dllexport ) virtual void initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fullScreen );
+        __declspec( dllexport ) virtual void setBackBufferSize( Vec2< int > size );
+        __declspec( dllexport ) virtual void setFullScreen( bool fullScreen );
+        __declspec( dllexport ) virtual void update() = 0;
+        __declspec( dllexport ) virtual void beginFrame( bool fill2D = 0, bool fill3D = 0, int fillColor = 0 );
+        __declspec( dllexport ) virtual void renderKamera( Kam3D *zKamera );
+        __declspec( dllexport ) virtual void presentFrame() = 0;
+        __declspec( dllexport ) virtual Textur *createOrGetTextur( const char *name, Bild *b = 0 );
+        __declspec( dllexport ) GraphicApiType getTyp() const;
+        __declspec( dllexport ) Vec2< int > getBackBufferSize() const;
+        __declspec( dllexport ) bool isFullScreen() const;
+        __declspec( dllexport ) virtual Bild *zUIRenderBild() const = 0;
+        __declspec( dllexport ) GraphicsApi *getThis();
+        __declspec( dllexport ) GraphicsApi *release();
     };
 
     class DirectX9 : public GraphicsApi
@@ -83,13 +102,13 @@ namespace Framework
         Bild *uiBild;
 
     public:
-        DirectX9();
-        ~DirectX9();
-        void initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fullScreen ) override;
-        void update() override;
-        void beginFrame( bool fill2D, bool fill3D, int fillColor ) override;
-        void presentFrame() override;
-        Bild *zUIRenderBild() const override;
+        __declspec( dllexport ) DirectX9();
+        __declspec( dllexport ) ~DirectX9();
+        __declspec( dllexport ) void initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fullScreen ) override;
+        __declspec( dllexport ) void update() override;
+        __declspec( dllexport ) void beginFrame( bool fill2D, bool fill3D, int fillColor ) override;
+        __declspec( dllexport ) void presentFrame() override;
+        __declspec( dllexport ) Bild *zUIRenderBild() const override;
     };
 
     class DirectX11 : public GraphicsApi
@@ -110,18 +129,36 @@ namespace Framework
         ID3D11BlendState *blendStateAlphaBlend;
         D3D11_VIEWPORT *vp;
         TexturModel *texturModel;
-        Render3D *renderObj;
         TexturList *texturRegister;
+        ID3D11RasterizerState *texturRS;
+        ID3D11RasterizerState *meshRS;
+        Textur *defaultTextur;
+        DX11StructuredBuffer *diffuseLights;
+        DX11StructuredBuffer *pointLights;
+        DX11Buffer *vertexBuffer;
+        DX11Buffer *indexBuffer;
+        Mat4< float > matrixBuffer[ MAX_KNOCHEN_ANZ ];
+        Mat4< float > viewAndProj[ 2 ];
+        Vec3< float > kamPos;
+        Ebene3D< float > frustrum[ 6 ];
+
+        void renderObject( Model3D *zObj );
+        // Überprüft, ob eine Kugel in dem Sichtbaren Raum der Welt liegt und gezeichnet werden muss
+        //  pos: Der Mittelpunkt der Kugel
+        //  radius: Der Radius der Kugel
+        //  dist: Einen Zeiger auf einen float, in dem das quadrat des Abstands zur Kammeraposition gespeichert wird, falls diese Funktion true zurückgiebt und der Zeiger nicht 0 ist
+        bool isInFrustrum( const Vec3< float > &pos, float radius, float *dist = 0 ) const;
 
     public:
-        DirectX11();
-        ~DirectX11();
-        void initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fullScreen ) override;
-        void update() override;
-        void beginFrame( bool fill2D, bool fill3D, int fillColor ) override;
-        void renderKamera( Kam3D *zKamera ) override;
-        void presentFrame() override;
-        Bild *zUIRenderBild() const override;
+        __declspec( dllexport ) DirectX11();
+        __declspec( dllexport ) ~DirectX11();
+        __declspec( dllexport ) void initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fullScreen ) override;
+        __declspec( dllexport ) void update() override;
+        __declspec( dllexport ) void beginFrame( bool fill2D, bool fill3D, int fillColor ) override;
+        __declspec( dllexport ) void renderKamera( Kam3D *zKamera ) override;
+        __declspec( dllexport ) void presentFrame() override;
+        __declspec( dllexport ) Textur *createOrGetTextur( const char *name, Bild *b ) override;
+        __declspec( dllexport ) Bild *zUIRenderBild() const override;
     };
 
     class DirectX12 : public GraphicsApi

+ 53 - 30
Kam3D.cpp

@@ -1,6 +1,5 @@
 #include "Kam3D.h"
 #include "Welt3D.h"
-#include "Render3D.h"
 #include "Shader.h"
 #include "TastaturEreignis.h"
 #include "Globals.h"
@@ -22,13 +21,12 @@ Kam3D::Kam3D()
     rotY = 0;
     rotZ = 0;
 
-    viewport = new D3D11_VIEWPORT();
-    viewport->TopLeftY = 0;
-    viewport->TopLeftX = 0;
-    viewport->MinDepth = 0.f;
-    viewport->MaxDepth = 1.f;
-    viewport->Width = 200;
-    viewport->Height = 200;
+    viewport.x = 0;
+    viewport.y = 0;
+    viewport.front = 0.f;
+    viewport.back = 1.f;
+    viewport.width = 200;
+    viewport.height = 200;
 
     welt = 0;
     style = 0;
@@ -43,7 +41,6 @@ Kam3D::~Kam3D()
 {
     if( welt )
         welt->release();
-    delete viewport;
 }
 
 // private
@@ -52,7 +49,7 @@ Kam3D::~Kam3D()
 void Kam3D::updateMatrix()
 {
     view = view.rotationX( -rotX ) * view.rotationY( -rotY ) * view.rotationZ( -rotZ ) * view.translation( Vec3< float >( -pos.x, -pos.y, -pos.z ) );
-    proj = proj.projektion( openingAngle, viewport->Width / viewport->Height, minZ, maxZ );
+    proj = proj.projektion( openingAngle, viewport.width / viewport.height, minZ, maxZ );
 }
 
 // Setzt die Position der Kamera in der 3D Welt
@@ -107,8 +104,8 @@ void Kam3D::setAusrichtung( Vec3< float > ziel )
 //  p: Ein Punkt mit x und y Koordinaten in Pixeln
 void Kam3D::setBildschirmPosition( Punkt p )
 {
-    viewport->TopLeftX = (float)p.x;
-    viewport->TopLeftY = (float)p.y;
+    viewport.x = (float)p.x;
+    viewport.y = (float)p.y;
 }
 
 // Setzt die Position des Bildes auf dem Bildschirm
@@ -116,16 +113,16 @@ void Kam3D::setBildschirmPosition( Punkt p )
 //  y: Die y Koordinate in Pixeln
 void Kam3D::setBildschirmPosition( int x, int y )
 {
-    viewport->TopLeftX = (float)x;
-    viewport->TopLeftY = (float)y;
+    viewport.x = (float)x;
+    viewport.y = (float)y;
 }
 
 // Setzt die Größe des Bildes auf dem Bildschirm
 //  p: Ein Punkt, mit x als Breite und y als Höhe in Pixlen
 void Kam3D::setBildschirmSize( Punkt p )
 {
-    viewport->Width = (float)p.x;
-    viewport->Height = (float)p.y;
+    viewport.width = (float)p.x;
+    viewport.height = (float)p.y;
     updateMatrix();
 }
 
@@ -134,8 +131,8 @@ void Kam3D::setBildschirmSize( Punkt p )
 //  hö: Die Höhe in Pixeln
 void Kam3D::setBildschirmSize( int br, int hö )
 {
-    viewport->Width = (float)br;
-    viewport->Height = (float)hö;
+    viewport.width = (float)br;
+    viewport.height = (float)hö;
     updateMatrix();
 }
 
@@ -233,12 +230,12 @@ void Kam3D::doMausEreignis( MausEreignis &me )
 {
     if( me.verarbeitet )
         return;
-    if( me.mx > viewport->TopLeftX && me.my > viewport->TopLeftY && me.mx < viewport->TopLeftX + viewport->Width && me.my < viewport->TopLeftY + viewport->Height )
+    if( me.mx > viewport.x && me.my > viewport.y && me.mx < viewport.x + viewport.width && me.my < viewport.y + viewport.height )
     {
         MausEreignis3D me3d;
         me3d.id = me.id;
         me3d.verarbeitet = me.verarbeitet;
-        Vec3< float > mausP = Vec3< float >( ( me.mx - viewport->TopLeftX ) / ( 0.5f * viewport->Width ) - 1, ( me.my - viewport->TopLeftY ) / ( 0.5f * viewport->Height ) - 1, 0 );
+        Vec3< float > mausP = Vec3< float >( ( me.mx - viewport.x ) / ( 0.5f * viewport.width ) - 1, ( me.my - viewport.y ) / ( 0.5f * viewport.height ) - 1, 0 );
         Vec3< float > mausT = Vec3< float >( mausP.x, mausP.y, 1 );
         Mat4< float > mat = proj * view;
         mat = mat.getInverse();
@@ -257,16 +254,6 @@ void Kam3D::doTastaturEreignis( TastaturEreignis &te )
 
 }
 
-// Zeichnet den Auschnitt der Welt, den die Kamera filmt
-//  zRObj: Das Render Objekt, mit dem gezeichnet werden soll
-void Kam3D::render( Render3D *zRObj )
-{
-    zRObj->zContext()->RSSetViewports( 1, viewport );
-    zRObj->setKameraMatrix( view, proj, pos );
-    if( welt )
-        welt->render( zRObj );
-}
-
 // Gibt zurück, ob bestimmte Styles gesetzt wurden
 //  style: Die Styles, die überprüft werden sollen
 //  return: 1, falls alle Styles in style gesetzt wurden
@@ -283,6 +270,42 @@ bool Kam3D::hatStyleNicht( __int64 style ) const
     return ( this->style | style ) != this->style;
 }
 
+// Gibt einen Zeiger auf den Viewport zurück
+const ViewPort *Kam3D::zViewPort() const
+{
+    return &viewport;
+}
+
+// Gibt die Position der Kamera in der Welt zurück
+const Vec3< float > &Kam3D::getWorldPosition() const
+{
+    return pos;
+}
+
+// Gibt die Projektionsmatrix der Kamera zurück
+const Mat4< float > &Kam3D::getProjectionMatrix() const
+{
+    return proj;
+}
+
+// Gibt die Ansichtsmatrix der Kamera zurück
+const Mat4< float > &Kam3D::getViewMatrix() const
+{
+    return view;
+}
+
+// Gibt die Welt zurück
+Welt3D *Kam3D::getWelt() const
+{
+    return welt ? welt->getThis() : 0;
+}
+
+// Gibt die Welt zurück
+Welt3D *Kam3D::zWelt() const
+{
+    return welt;
+}
+
 // Erhöht den Reference Counter um 1
 //  Return: Ein zeiger auf diesen Shader
 Kam3D *Kam3D::getThis()

+ 23 - 4
Kam3D.h

@@ -14,6 +14,16 @@ namespace Framework
     class Render3D; // Render3D.h
     class Welt3D; // Welt3D.h
 
+    struct ViewPort
+    {
+        float x;
+        float y;
+        float width;
+        float height;
+        float front;
+        float back;
+    };
+
     // Eine 3d Kamera, die einen Ausschnitt einer 3D Welt in einen bestimmten Teil des Bildschirms zeichnet
     class Kam3D
     {
@@ -39,7 +49,7 @@ namespace Framework
         float rotY;
         float rotZ;
 
-        D3D11_VIEWPORT *viewport;
+        ViewPort viewport;
         Welt3D *welt;
         __int64 style;
         int ref;
@@ -103,9 +113,6 @@ namespace Framework
         // Verarbeitet ein Tastaturereignis
         //  te: das Tastaturereignis, das verarbeitet werden soll
         __declspec( dllexport ) void doTastaturEreignis( TastaturEreignis &te );
-        // Zeichnet den Auschnitt der Welt, den die Kamera filmt
-        //  zRObj: Das Render Objekt, mit dem gezeichnet werden soll
-        __declspec( dllexport ) void render( Render3D *zRObj );
         // Gibt zurück, ob bestimmte Styles gesetzt wurden
         //  style: Die Styles, die überprüft werden sollen
         //  return: 1, falls alle Styles in style gesetzt wurden
@@ -114,6 +121,18 @@ namespace Framework
         //  style: Die Styles, die geprüft werden sollen
         //  return: 1, falls alle Styles in style nicht gesetzt wurden
         __declspec( dllexport ) bool hatStyleNicht( __int64 style ) const;
+        // Gibt einen Zeiger auf den Viewport zurück
+        __declspec( dllexport ) const ViewPort *zViewPort() const;
+        // Gibt die Position der Kamera in der Welt zurück
+        __declspec( dllexport ) const Vec3< float > &getWorldPosition() const;
+        // Gibt die Projektionsmatrix der Kamera zurück
+        __declspec( dllexport ) const Mat4< float > &getProjectionMatrix() const;
+        // Gibt die Ansichtsmatrix der Kamera zurück
+        __declspec( dllexport ) const Mat4< float > &getViewMatrix() const;
+        // Gibt die Welt zurück
+        __declspec( dllexport ) Welt3D *getWelt() const;
+        // Gibt die Welt zurück
+        __declspec( dllexport ) Welt3D *zWelt() const;
         // Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann
         // Erhöht den Reference Counter um 1
         //  Return: Ein zeiger auf diesen Shader

+ 70 - 79
Model3D.cpp

@@ -4,7 +4,6 @@
 #include "Textur.h"
 #include "Animation3D.h"
 #ifdef WIN32
-#include "Render3D.h"
 #include <d3d11.h>
 #endif
 #include <stdexcept>
@@ -34,7 +33,7 @@ Knochen::~Knochen()
 
 // Fügt dem Knochen ein Geschwister Knochen hinzu
 //  k: Der Knochen, der hinzugefügt werden soll
-void Knochen::addGeschwisterKnochen( Knochen* k )
+void Knochen::addGeschwisterKnochen( Knochen *k )
 {
     if( !geschwister )
         geschwister = k;
@@ -82,7 +81,7 @@ void Knochen::addKind( int id, Knochen * k )
             err += __LINE__;
             err += "!";
             delete k;
-            throw std::out_of_range( (const char*)err );
+            throw std::out_of_range( (const char *)err );
         }
     }
 }
@@ -105,7 +104,7 @@ void Knochen::kalkulateMatrix( Mat4< float > & elternMat, Mat4< float > * matBuf
 // Kopiert den Knochen mit allen Geschwister Knochen und Kind Knochen
 Knochen * Knochen::kopiereKnochen() const
 {
-    Knochen* ret = new Knochen( id );
+    Knochen *ret = new Knochen( id );
     ret->pos = pos;
     ret->winkel = winkel;
     if( geschwister )
@@ -201,9 +200,9 @@ float Skelett::getRadius() const
 }
 
 // Kopiert das Skelett
-Skelett* Skelett::kopiereSkelett() const
+Skelett *Skelett::kopiereSkelett() const
 {
-    Skelett* ret = new Skelett();
+    Skelett *ret = new Skelett();
     ret->nextId = nextId;
     if( k )
         ret->addKnochen( k->kopiereKnochen() );
@@ -211,7 +210,7 @@ Skelett* Skelett::kopiereSkelett() const
 }
 
 // Erhöht den Reference Counting Zähler.
-Skelett* Skelett::getThis()
+Skelett *Skelett::getThis()
 {
     ref++;
     return this;
@@ -219,7 +218,7 @@ Skelett* Skelett::getThis()
 
 // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
 //  return: 0.
-Skelett* Skelett::release()
+Skelett *Skelett::release()
 {
     ref--;
     if( !ref )
@@ -234,13 +233,11 @@ Polygon3D::Polygon3D()
 {
     indexAnz = 0;
     indexList = 0;
-    indexBuffer = new DXIndexBuffer( sizeof( int ) );
 }
 
 // Destruktor
 Polygon3D::~Polygon3D()
 {
-    indexBuffer->release();
     delete[] indexList;
 }
 
@@ -253,8 +250,7 @@ Model3DData::Model3DData()
     skelett = 0;
     vertexList = 0;
     vertexCount = 0;
-    polygons = new Array< Polygon3D* >();
-    vertexBuffer = new DXVertexBuffer( sizeof( Vertex3D ) );
+    polygons = new Array< Polygon3D * >();
     ambientFactor = 1.f;
     diffusFactor = 0.f;
     specularFactor = 0.f;
@@ -266,7 +262,6 @@ Model3DData::Model3DData()
 Model3DData::~Model3DData()
 {
     clearModel();
-    vertexBuffer->release();
     polygons->release();
 }
 
@@ -300,7 +295,7 @@ void Model3DData::calculateNormals()
                     begin = j;
                 if( p->indexList[ j ] == i )
                 {
-                    Vec3< float > a = vertexList[ p->indexList[ begin  ] ].pos;
+                    Vec3< float > a = vertexList[ p->indexList[ begin ] ].pos;
                     Vec3< float > b = vertexList[ p->indexList[ begin + 1 ] ].pos;
                     Vec3< float > c = vertexList[ p->indexList[ begin + 2 ] ].pos;
                     normal += ( b - a ).crossProduct( c - a ).normalize();
@@ -328,8 +323,6 @@ void Model3DData::setVertecies( Vertex3D * vertexList, int anz )
 {
     delete[] this->vertexList;
     this->vertexList = vertexList;
-    vertexBuffer->setData( vertexList );
-    vertexBuffer->setLength( ( int )sizeof( Vertex3D ) * anz );
     vertexCount = anz;
     radius = 0;
     for( int i = 0; i < anz; i++ )
@@ -380,12 +373,10 @@ void Model3DData::copyModel2D( Model2DData * model, float z )
         for( auto i = model->polygons->getIterator(); i; i++ )
             vAnz += i._.vertex->getEintragAnzahl();
         vertexList = new Vertex3D[ vAnz ];
-        vertexBuffer->setData( vertexList );
-        vertexBuffer->setLength( ( int )sizeof( Vertex3D ) * vAnz );
         int index = 0;
         for( auto i = model->vListen->getIterator(); i; i++ )
         {
-            Polygon3D* p = new Polygon3D();
+            Polygon3D *p = new Polygon3D();
             p->indexAnz = 0;
             for( auto j = i->getIterator(); j; j++ )
             {
@@ -393,8 +384,6 @@ void Model3DData::copyModel2D( Model2DData * model, float z )
                     p->indexAnz += 3;
             }
             p->indexList = new int[ p->indexAnz ];
-            p->indexBuffer->setData( p->indexList );
-            p->indexBuffer->setLength( ( int )sizeof( int ) * p->indexAnz );
             p->indexAnz = 0;
             for( auto j = i->getIterator(); j; j++ )
             {
@@ -429,13 +418,6 @@ void Model3DData::removePolygon( int index )
     polygons->remove( index );
 }
 
-// Aktualisiert die Vertecies
-//  zRObj: Das Objekt, mit dem die Grafikkarte verwaltet wird
-void Model3DData::aktualisiereVertecies( Render3D * zRObj )
-{
-    vertexBuffer->copieren( zRObj );
-}
-
 // Berechnet die Matrizen der Knochen
 //  modelMatrix: Die Matrix, die das Skelett in den Raum der Welt transformiert
 //  matBuffer: Ein Array von Matrizen, der durch die Knochen Matrizen gefüllt wird
@@ -448,26 +430,6 @@ int Model3DData::kalkulateMatrix( Mat4< float > & modelMatrix, Mat4< float > * m
     return skelett->kalkulateMatrix( modelMatrix, matBuffer, kamMatrix );
 }
 
-// Zeichnet alle Polygons
-//  world: Die Welt Matrix, die das Model in die Welt transformiert
-//  zTxt: Eine Liste mit Texturen der einzelnen Polygone
-//  zRObj: Das Objekt, mit dem gezeichnet werden soll
-void Model3DData::render( Mat4< float > & welt, const Model3DTextur * zTxt, Render3D * zRObj )
-{
-    int ind = 0;
-    for( auto i = polygons->getIterator(); i; i++ )
-    {
-        i->indexBuffer->copieren( zRObj );
-        Textur* t = zTxt->zPolygonTextur( ind );
-        if( t&& t->brauchtUpdate() )
-            t->updateTextur( zRObj );
-#ifdef WIN32
-        zRObj->draw( i->indexBuffer, t );
-#endif
-        ind++;
-    }
-}
-
 // Gibt die Anzahl an Polygonen zurück
 int Model3DData::getPolygonAnzahl() const
 {
@@ -476,13 +438,19 @@ int Model3DData::getPolygonAnzahl() const
 
 // Gibt ein bestimmtes Polygon zurück
 //  index: Der Index des Polygons
-Polygon3D* Model3DData::getPolygon( int index ) const
+Polygon3D *Model3DData::getPolygon( int index ) const
 {
     if( !polygons->hat( index ) )
         return 0;
     return polygons->get( index );
 }
 
+// Gibt einen Iterator zurück, mit dem sich die Polygons auflisten lassen
+Iterator< Polygon3D * > Model3DData::getPolygons() const
+{
+    return polygons->getIterator();
+}
+
 // Gibt den radius einer Kugel zurück, die das gesammte Model umschließt
 float Model3DData::getRadius() const
 {
@@ -513,15 +481,27 @@ float Model3DData::getSpecularFactor() const
     return specularFactor;
 }
 
+// Gibt eine Kopie des Skeletts zurück, welches für annimationen verwendet werden kann
+Skelett *Model3DData::copySkelett() const
+{
+    return skelett ? skelett->kopiereSkelett() : 0;
+}
+
+// Gibt die Anzahl an Vertices zurück
+int Model3DData::getVertexAnzahl() const
+{
+    return vertexCount;
+}
+
 // Gibt einen Buffer mit allen Vertecies des Models zurück
-const DXVertexBuffer* Model3DData::zVertexBuffer() const
+const Vertex3D *Model3DData::zVertexBuffer() const
 {
-    return vertexBuffer;
+    return vertexList;
 }
 
 // Erhöht den Reference Counting Zähler.
 //  return: this.
-Model3DData* Model3DData::getThis()
+Model3DData *Model3DData::getThis()
 {
     ref++;
     return this;
@@ -529,7 +509,7 @@ Model3DData* Model3DData::getThis()
 
 // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
 //  return: 0.
-Model3DData* Model3DData::release()
+Model3DData *Model3DData::release()
 {
     ref--;
     if( !ref )
@@ -563,14 +543,14 @@ void Model3DTextur::setPolygonTextur( int pI, Textur * txt )
 
 // Gibt einen Zeiger auf die Textur eines Polygons zurück ohne erhöhten Reference Counter
 //  i: Der Index des Polygons
-Textur* Model3DTextur::zPolygonTextur( int i ) const
+Textur *Model3DTextur::zPolygonTextur( int i ) const
 {
     return textures->z( i );
 }
 
 // Erhöht den Reference Counting Zähler.
 //  return: this.
-Model3DTextur* Model3DTextur::getThis()
+Model3DTextur *Model3DTextur::getThis()
 {
     ref++;
     return this;
@@ -578,7 +558,7 @@ Model3DTextur* Model3DTextur::getThis()
 
 // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
 //  return: 0.
-Model3DTextur* Model3DTextur::release()
+Model3DTextur *Model3DTextur::release()
 {
     ref--;
     if( !ref )
@@ -587,12 +567,12 @@ Model3DTextur* Model3DTextur::release()
 }
 
 // Inhalt der AnimationData Struktur
-Model3D::AnimationData* Model3D::AnimationData::getThis()
+Model3D::AnimationData *Model3D::AnimationData::getThis()
 {
     return this;
 }
 
-Model3D::AnimationData* Model3D::AnimationData::release()
+Model3D::AnimationData *Model3D::AnimationData::release()
 {
     a->release();
     delete this;
@@ -626,7 +606,7 @@ Model3D::~Model3D()
 //  a: Die neue Animation
 void Model3D::addAnimation( Animation3D * a, double speed )
 {
-    AnimationData* d = new AnimationData();
+    AnimationData *d = new AnimationData();
     d->a = a;
     d->speed = speed;
     d->offset = 0;
@@ -647,22 +627,16 @@ void Model3D::removeAnimation( Animation3D * zA )
     }
 }
 
-// Setzt den Zeiger auf das zum Annimieren verwendete Skelett
-//  s: Das Skelett, das verwendet werden soll
-void Model3D::setSkelettZ( Skelett * s )
-{
-    if( skelett )
-        skelett->release();
-    skelett = s;
-}
-
 // Setzt die Daten des Models
 //  data: Die Daten
 void Model3D::setModelDaten( Model3DData * data )
 {
     if( model )
         model->release();
+    if( skelett )
+        skelett = skelett->release();
     model = data;
+    skelett = model->copySkelett();
 }
 
 // Setzt die zum Zeichnen zu benutzenden Texturen
@@ -708,17 +682,28 @@ bool Model3D::tick( double tickval )
     return Zeichnung3D::tick( tickval );
 }
 
-// Zeichnet das Model
-//  zRObj: Ein Zeiger auf das Objekt, das zum Zeichnen verwendet werden soll (ohne erhöhten Reference Counter)
-void Model3D::render( Render3D * zRObj )
+// Gibt die Textur zurück
+Model3DTextur *Model3D::getTextur()
 {
-    if( !model )
-        return;
-    model->aktualisiereVertecies( zRObj );
-#ifdef WIN32
-    zRObj->beginnModel( this );
-#endif
-    model->render( welt, textur, zRObj );
+    return textur ? textur->getThis() : 0;
+}
+
+// Gibt die Textur zurück (ohne erhöhten Reference Counter)
+Model3DTextur *Model3D::zTextur()
+{
+    return textur;
+}
+
+// Gibt die ModelDaten zurück
+Model3DData *Model3D::getModelData()
+{
+    return model ? model->getThis() : 0;
+}
+
+// Gibt die ModelDaten zurück (ohne erhöhten Reference Counter)
+Model3DData *Model3D::zModelData()
+{
+    return model;
 }
 
 // Gibt die Id der Daten zurück, wenn sie in einer Model3DList registriert wurden. (siehe Framework::zM3DRegister())
@@ -745,8 +730,14 @@ float Model3D::getSpecularFactor() const
     return model ? model->getSpecularFactor() : 0.f;
 }
 
+// Gibt die Anzahl an Vertices zurück
+int Model3D::getVertexAnzahl() const
+{
+    return model ? model->getVertexAnzahl() : 0;
+}
+
 // Gibt einen Buffer mit allen Vertecies des Models zurück
-const DXVertexBuffer* Model3D::zVertexBuffer() const
+const Vertex3D *Model3D::zVertexBuffer() const
 {
     return model ? model->zVertexBuffer() : 0;
 }

+ 22 - 22
Model3D.h

@@ -12,8 +12,7 @@ namespace Framework
     struct Polygon2D; // Model2D.h
     class Textur; // Textur.h
     class Model2DData; // Model2D.h
-    class DXIndexBuffer; // DXBuffer.h
-    class DXVertexBuffer; // DXBuffer.h
+    class DXBuffer; // DXBuffer.h
     class Render3D; // Render3D.h
     class Model3DTextur; // Model3D.h
     class Model3DList; // Model3DList.h
@@ -121,7 +120,6 @@ namespace Framework
     {
         int *indexList; // Die Liste mit den IDs der Ecken
         int indexAnz; // Die Länge der Liste mit den Ids der Ecken
-        DXIndexBuffer *indexBuffer; // Die DirectX11 Struktur, die die Liste mit IDs der Ecken verwaltet
 
         // Konstruktor
         __declspec( dllexport ) Polygon3D();
@@ -137,8 +135,7 @@ namespace Framework
         Skelett *skelett;
         Vertex3D *vertexList;
         int vertexCount;
-        DXVertexBuffer *vertexBuffer;
-        Array< Polygon3D* > *polygons;
+        Array< Polygon3D * > *polygons;
         float ambientFactor;
         float diffusFactor;
         float specularFactor;
@@ -173,7 +170,7 @@ namespace Framework
         __declspec( dllexport ) void setDiffusFactor( float f );
         // Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
         //  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
-        __declspec( dllexport ) void setSpecularFactor( float f);
+        __declspec( dllexport ) void setSpecularFactor( float f );
         // Konvertiert ein 2d Model zu 3D
         //  model: Das 2d Model, das zu 3d konvertiert werden soll
         //  z: Die z koordinate aller punkte des Models
@@ -181,24 +178,19 @@ namespace Framework
         // Entfernt ein Polygon
         //  index: Der Index des Polygons
         __declspec( dllexport ) void removePolygon( int index );
-        // Aktualisiert die Vertecies
-        __declspec( dllexport ) void aktualisiereVertecies( Render3D *zRObj );
         // Berechnet die Matrizen der Knochen des Standart Skeletts
         //  modelMatrix: Die Matrix, die das Skelett in den Raum der Welt transformiert
         //  matBuffer: Ein Array von Matrizen, der durch die Knochen Matrizen gefüllt wird
         //  return: gibt die Anzahl der verwendeten Matrizen zurück. 0, falls kein Standart Skelett gesetzt wurde
         //  kamMatrix: Die vereiniegung der view und projektions Matrizen
         int kalkulateMatrix( Mat4< float > &modelMatrix, Mat4< float > *matBuffer, Mat4< float > &kamMatrix ) const;
-        // Zeichnet alle Polygons
-        //  world: Die Welt Matrix, die das Model in die Welt transformiert
-        //  zTxt: Eine Liste mit Texturen der einzelnen Polygone
-        //  zRObj: Das Objekt, mit dem gezeichnet werden soll
-        __declspec( dllexport ) void render( Mat4< float > &welt, const Model3DTextur *zTxt, Render3D *zRObj );
         // Gibt die Anzahl an Polygonen zurück
         __declspec( dllexport ) int getPolygonAnzahl() const;
         // Gibt ein bestimmtes Polygon zurück
         //  index: Der Index des Polygons
         __declspec( dllexport ) Polygon3D *getPolygon( int index ) const;
+        // Gibt einen Iterator zurück, mit dem sich die Polygons auflisten lassen
+        __declspec( dllexport ) Iterator< Polygon3D * > getPolygons() const;
         // Gibt den radius einer Kugel zurück, die das gesammte Model umschließt
         __declspec( dllexport ) float getRadius() const;
         // Gibt die Id der Daten zurück, wenn sie in einer Model3DList registriert wurden. (siehe Framework::zM3DRegister())
@@ -209,8 +201,12 @@ namespace Framework
         __declspec( dllexport ) float getDiffusFactor() const;
         // Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
         __declspec( dllexport ) float getSpecularFactor() const;
+        // Gibt eine Kopie des Skeletts zurück, welches für annimationen verwendet werden kann
+        __declspec( dllexport ) Skelett *copySkelett() const;
+        // Gibt die Anzahl an Vertices zurück
+        __declspec( dllexport ) int getVertexAnzahl() const;
         // Gibt einen Buffer mit allen Vertecies des Models zurück
-        __declspec( dllexport ) const DXVertexBuffer *zVertexBuffer() const;
+        __declspec( dllexport ) const Vertex3D *zVertexBuffer() const;
         // Erhöht den Reference Counting Zähler.
         //  return: this.
         __declspec( dllexport ) Model3DData *getThis();
@@ -262,8 +258,8 @@ namespace Framework
             AnimationData *release();
         };
 
-        Model3DData *model;
         Skelett *skelett;
+        Model3DData *model;
         Model3DTextur *textur;
         RCArray< AnimationData > *animations;
 
@@ -278,9 +274,6 @@ namespace Framework
         // Entfernt eine Animation
         //  zA: Die zu entfernende Animation
         __declspec( dllexport ) void removeAnimation( Animation3D *zA );
-        // Setzt den Zeiger auf das zum Annimieren verwendete Skelett
-        //  s: Das Skelett, das verwendet werden soll
-        __declspec( dllexport ) void setSkelettZ( Skelett *s );
         // Setzt die Daten des Models
         //  data: Die Daten
         __declspec( dllexport ) void setModelDaten( Model3DData *data );
@@ -296,9 +289,14 @@ namespace Framework
         //  tickval: Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
         //  return: true, wenn sich das Objekt verändert hat, false sonnst.
         __declspec( dllexport ) virtual bool tick( double tickval ) override;
-        // Zeichnet das Model
-        //  zRObj: Ein Zeiger auf das Objekt, das zum Zeichnen verwendet werden soll (ohne erhöhten Reference Counter)
-        __declspec( dllexport ) void render( Render3D *zRObj ) override;
+        // Gibt die Textur zurück
+        __declspec( dllexport ) Model3DTextur *getTextur();
+        // Gibt die Textur zurück (ohne erhöhten Reference Counter)
+        __declspec( dllexport ) Model3DTextur *zTextur();
+        // Gibt die ModelDaten zurück
+        __declspec( dllexport ) Model3DData *getModelData();
+        // Gibt die ModelDaten zurück (ohne erhöhten Reference Counter)
+        __declspec( dllexport ) Model3DData *zModelData();
         // Gibt die Id der Daten zurück, wenn sie in einer Model3DList registriert wurden. (siehe Framework::zM3DRegister())
         __declspec( dllexport ) int getDatenId() const;
         // Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
@@ -307,7 +305,9 @@ namespace Framework
         __declspec( dllexport ) float getDiffusFactor() const;
         // Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
         __declspec( dllexport ) float getSpecularFactor() const;
+        // Gibt die Anzahl an Vertices zurück
+        __declspec( dllexport ) int getVertexAnzahl() const;
         // Gibt einen Buffer mit allen Vertecies des Models zurück
-        __declspec( dllexport ) const DXVertexBuffer *zVertexBuffer() const;
+        __declspec( dllexport ) const Vertex3D *zVertexBuffer() const;
     };
 }

+ 0 - 353
Render3D.cpp

@@ -1,353 +0,0 @@
-#include "Render3D.h"
-#include "Shader.h"
-#include "Model3D.h"
-#include "DXBuffer.h"
-#include "Textur.h"
-#include "Bild.h"
-#include <d3d11.h>
-
-using namespace Framework;
-
-// Inhalt der Render3D Klasse
-// Konstruktor
-Render3D::Render3D()
-{
-    device = 0;
-    context = 0;
-    texturRS = 0;
-    meshRS = 0;
-    defaultTextur = new Textur();
-    Bild *b = new Bild();
-    b->neuBild( 10, 10, 0xFFFFFFFF );
-    defaultTextur->setBildZ( b );
-    shader = new RCArray< RCArray< Shader > >();
-    shaderId = new Array< int >();
-    diffuseLights = new DXStructuredBuffer( sizeof( DiffuseLight ) );
-    pointLights = new DXStructuredBuffer( sizeof( PointLight ) );
-    lastObjektId = -1;
-    lastTexturId = -1;
-    ref = 1;
-}
-
-// Destruktor
-Render3D::~Render3D()
-{
-    if( device )
-        device->Release();
-    if( context )
-        context->Release();
-    if( texturRS )
-        texturRS->Release();
-    if( meshRS )
-        meshRS->Release();
-    defaultTextur->release();
-    shader->release();
-    shaderId->release();
-    diffuseLights->release();
-    pointLights->release();
-}
-
-// Setzt das Device, was zum zeichnen verwendet werden soll
-//  device: Das neue Device
-void Render3D::setDevice( ID3D11Device * device )
-{
-    if( this->device )
-        this->device->Release();
-    this->device = device;
-    if( device )
-    {
-        if( !texturRS )
-        {
-            D3D11_RASTERIZER_DESC rasterDesc;
-            ZeroMemory( &rasterDesc, sizeof( rasterDesc ) );
-            rasterDesc.AntialiasedLineEnable = false;
-            rasterDesc.CullMode = D3D11_CULL_BACK;
-            rasterDesc.DepthBiasClamp = 0.0f;
-            rasterDesc.DepthClipEnable = true;
-            rasterDesc.FillMode = D3D11_FILL_SOLID;
-            rasterDesc.FrontCounterClockwise = false;
-            rasterDesc.MultisampleEnable = false;
-            rasterDesc.ScissorEnable = false;
-            rasterDesc.SlopeScaledDepthBias = 0.0f;
-            device->CreateRasterizerState( &rasterDesc, &texturRS );
-        }
-        if( !meshRS )
-        {
-            D3D11_RASTERIZER_DESC rasterDesc;
-            ZeroMemory( &rasterDesc, sizeof( rasterDesc ) );
-            rasterDesc.AntialiasedLineEnable = false;
-            rasterDesc.CullMode = D3D11_CULL_BACK;
-            rasterDesc.DepthBiasClamp = 0.0f;
-            rasterDesc.DepthClipEnable = true;
-            rasterDesc.FillMode = D3D11_FILL_WIREFRAME;
-            rasterDesc.FrontCounterClockwise = false;
-            rasterDesc.MultisampleEnable = false;
-            rasterDesc.ScissorEnable = false;
-            rasterDesc.SlopeScaledDepthBias = 0.0f;
-            device->CreateRasterizerState( &rasterDesc, &meshRS );
-        }
-        if( context )
-        {
-            context->RSSetState( texturRS );
-            defaultTextur->updateTextur( this );
-        }
-        // TODO: Folgenden tets Code entfernen
-        DiffuseLight dl[ 1 ];
-        dl[ 0 ].direction = Vec3< float >( -0.5f, -0.5f, -0.5f ).normalize();
-        dl[ 0 ].color = Vec3<float>( 1.f, 0.f, 0.f );
-        diffuseLights->setData( dl );
-        diffuseLights->setLength( sizeof( dl ) );
-        diffuseLights->copieren( this );
-        PointLight pl[ 6 ];
-        pl[ 0 ].position = Vec3< float >( 0, 130, 0 );
-        pl[ 0 ].color = Vec3< float >( 1.f, 1.f, 0.f );
-        pl[ 0 ].radius = 100;
-        pl[ 1 ].position = Vec3< float >( 150, 130, 0 );
-        pl[ 1 ].color = Vec3< float >( 0.f, 1.f, 0.f );
-        pl[ 1 ].radius = 100;
-        pl[ 2 ].position = Vec3< float >( 150, 130, 150 );
-        pl[ 2 ].color = Vec3< float >( 0.f, 0.f, 1.f );
-        pl[ 2 ].radius = 100;
-        pl[ 3 ].position = Vec3< float >( -150, 130, 0 );
-        pl[ 3 ].color = Vec3< float >( 1.f, 0.f, 1.f );
-        pl[ 3 ].radius = 100;
-        pl[ 4 ].position = Vec3< float >( 0, 130, 150 );
-        pl[ 4 ].color = Vec3< float >( 0.f, 1.f, 1.f );
-        pl[ 4 ].radius = 100;
-        pl[ 5 ].position = Vec3< float >( -150, 130, 150 );
-        pl[ 5 ].color = Vec3< float >( 1.f, 0.f, 0.f );
-        pl[ 5 ].radius = 100;
-        pointLights->setData( pl );
-        pointLights->setLength( sizeof( pl ) * 6 );
-        pointLights->copieren( this );
-    }
-}
-
-// Setzt das Context Objekt, das zum Zeichnen verwendet werden soll
-//  context: das neue Conext Objekt
-void Render3D::setContext( ID3D11DeviceContext * context )
-{
-    if( this->context )
-        this->context->Release();
-    this->context = context;
-    if( context )
-    {
-        if( texturRS )
-            context->RSSetState( texturRS );
-        if( device )
-            defaultTextur->updateTextur( this );
-    }
-}
-
-// Setzt den aktuellen Shader. Er wird hinten an die Liste mit zuletzt verwendeten Shadern angefügt
-//  listIndex: Der Index der Liste mit zuletzt verwendeten Shadern
-//  sh: Der Shader, der verwendet werden soll
-void Render3D::benutzeShader( int listIndex, Shader * sh )
-{
-    if( listIndex < 0 )
-        return;
-    if( !shader->z( listIndex ) || !shaderId->hat( listIndex ) )
-    {
-        shader->set( new RCArray< Shader >(), listIndex );
-        shaderId->set( -1, listIndex );
-    }
-    int id = shaderId->get( listIndex ) + 1;
-    shader->z( listIndex )->set( sh, id );
-    shaderId->set( id, listIndex );
-    sh->benutzeShader( context );
-}
-
-// Sprinkt in der Liste mit zuletzt benutzten Shadern zurück und benutzt wieder den dortiegen Shader
-//  listIndex: Der Index der Liste mit zuletzt verwe deten Shadern
-//  anz: Die Anzahl der Shader, die zurückgesprungen werden soll. Bei 0 passiert nichts
-void Render3D::releaseShader( int listIndex, int anz )
-{
-    if( !shader->z( listIndex ) || !shaderId->hat( listIndex ) || anz < 0 )
-        return;
-    int id = shaderId->get( listIndex ) - anz;
-    if( id < 0 )
-        id = 0;
-    if( shader->z( listIndex )->z( id ) )
-        shader->z( listIndex )->z( id )->benutzeShader( context );
-    shaderId->set( id, listIndex );
-}
-
-// Setzt die View und Projektion Matrizen, die zum zeichnen verwendet werden sollen
-//  view: Die View Matrix der Kamera
-//  proj: Die Projektion Matrix der Kamera
-//  kamPos: Die Position der Kamera in der Welt
-void Render3D::setKameraMatrix( Mat4< float > & view, Mat4< float > & proj, Vec3< float > & kamPos )
-{
-    viewAndProj[ 0 ] = view;
-    viewAndProj[ 1 ] = proj;
-    this->kamPos = kamPos;
-
-    Mat4< float > tmp = proj * view;
-
-    frustrum[ 0 ].x = tmp.elements[ 3 ][ 0 ] + tmp.elements[ 0 ][ 0 ];
-    frustrum[ 0 ].y = tmp.elements[ 3 ][ 1 ] + tmp.elements[ 0 ][ 1 ];
-    frustrum[ 0 ].z = tmp.elements[ 3 ][ 2 ] + tmp.elements[ 0 ][ 2 ];
-    frustrum[ 0 ].w = tmp.elements[ 3 ][ 3 ] + tmp.elements[ 0 ][ 3 ];
-
-    frustrum[ 1 ].x = tmp.elements[ 3 ][ 0 ] - tmp.elements[ 0 ][ 0 ];
-    frustrum[ 1 ].y = tmp.elements[ 3 ][ 1 ] - tmp.elements[ 0 ][ 1 ];
-    frustrum[ 1 ].z = tmp.elements[ 3 ][ 2 ] - tmp.elements[ 0 ][ 2 ];
-    frustrum[ 1 ].w = tmp.elements[ 3 ][ 3 ] - tmp.elements[ 0 ][ 3 ];
-
-    frustrum[ 2 ].x = tmp.elements[ 3 ][ 0 ] - tmp.elements[ 1 ][ 0 ];
-    frustrum[ 2 ].y = tmp.elements[ 3 ][ 1 ] - tmp.elements[ 1 ][ 1 ];
-    frustrum[ 2 ].z = tmp.elements[ 3 ][ 2 ] - tmp.elements[ 1 ][ 2 ];
-    frustrum[ 2 ].w = tmp.elements[ 3 ][ 3 ] - tmp.elements[ 1 ][ 3 ];
-
-    frustrum[ 3 ].x = tmp.elements[ 3 ][ 0 ] + tmp.elements[ 1 ][ 0 ];
-    frustrum[ 3 ].y = tmp.elements[ 3 ][ 1 ] + tmp.elements[ 1 ][ 1 ];
-    frustrum[ 3 ].z = tmp.elements[ 3 ][ 2 ] + tmp.elements[ 1 ][ 2 ];
-    frustrum[ 3 ].w = tmp.elements[ 3 ][ 3 ] + tmp.elements[ 1 ][ 3 ];
-
-    frustrum[ 4 ].x = tmp.elements[ 2 ][ 0 ];
-    frustrum[ 4 ].y = tmp.elements[ 2 ][ 1 ];
-    frustrum[ 4 ].z = tmp.elements[ 2 ][ 2 ];
-    frustrum[ 4 ].w = tmp.elements[ 2 ][ 3 ];
-
-    frustrum[ 5 ].x = tmp.elements[ 3 ][ 0 ] - tmp.elements[ 2 ][ 0 ];
-    frustrum[ 5 ].y = tmp.elements[ 3 ][ 1 ] - tmp.elements[ 2 ][ 1 ];
-    frustrum[ 5 ].z = tmp.elements[ 3 ][ 2 ] - tmp.elements[ 2 ][ 2 ];
-    frustrum[ 5 ].w = tmp.elements[ 3 ][ 3 ] - tmp.elements[ 2 ][ 3 ];
-
-    for( int i = 0; i < 6; i++ )
-        frustrum[ i ].normalize();
-}
-
-// Beginnt das Zeichnen eines bestimmten objektes
-//  zMdl: Das 3D Modelohne erhöhten Reference Counter
-void Render3D::beginnModel( Model3D * zMdl )
-{
-    Mat4< float > trans = Mat4< float >::identity();
-    int anz = zMdl->errechneMatrizen( trans, matrixBuffer );
-    if( shader->z( VERTEX ) && shaderId->hat( VERTEX ) )
-        shader->z( VERTEX )->z( shaderId->get( VERTEX ) )->füllConstBuffer( context, (char *)matrixBuffer, 0, sizeof( Mat4< float > ) * anz );
-    matirialBuffer[ 0 ] = zMdl->getAmbientFactor();
-    matirialBuffer[ 1 ] = zMdl->getDiffusFactor();
-    matirialBuffer[ 2 ] = zMdl->getSpecularFactor();
-    if( shader->z( VERTEX ) && shaderId->hat( VERTEX ) )
-        shader->z( VERTEX )->z( shaderId->get( VERTEX ) )->füllConstBuffer( context, (char *)viewAndProj, 1, sizeof( Mat4< float > ) * 2 );
-    if( shader->z( PIXEL ) && shaderId->hat( PIXEL ) )
-        shader->z( PIXEL )->z( shaderId->get( PIXEL ) )->füllConstBuffer( context, (char *)& kamPos, 0, sizeof( float ) * 3 );
-    if( shader->z( PIXEL ) && shaderId->hat( PIXEL ) )
-        shader->z( PIXEL )->z( shaderId->get( PIXEL ) )->füllConstBuffer( context, (char *)matirialBuffer, 1, sizeof( float ) * 3 );
-    if( lastObjektId == -1 || lastObjektId != zMdl->getDatenId() )
-    {
-        lastObjektId = zMdl->getDatenId();
-        unsigned int offset = 0;
-        ID3D11Buffer *b = zMdl->zVertexBuffer()->zBuffer();
-        unsigned int es = (unsigned)zMdl->zVertexBuffer()->getElementLength();
-        context->IASetVertexBuffers( 0, 1, &b, &es, &offset );
-    }
-}
-
-// Zeichnet eine bestimmte struktur
-//  zIndexBuffer: Ein IndexBuffer, der auf verschiedene Vertices aus dem Vertex Buffer des Models zeigt. Ohne erhöhten Reference Counter
-//  textur: Ein Zeiger auf die Textur, die verwendet werden soll ohne erhöhten Reference Counter
-//  struktur: Die Struktur der angegebenen Indices, Beispiel: D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST oder D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP ...
-void Render3D::draw( DXIndexBuffer * zIndexBuffer, Textur * textur, D3D_PRIMITIVE_TOPOLOGY struktur )
-{
-    DXGI_FORMAT f = DXGI_FORMAT_R32_UINT;
-    if( zIndexBuffer->getElementLength() == 2 )
-        f = DXGI_FORMAT_R16_UINT;
-    if( zIndexBuffer->getElementLength() == 1 )
-        f = DXGI_FORMAT_R8_UINT;
-    context->IASetIndexBuffer( zIndexBuffer->zBuffer(), f, 0 );
-    context->IASetPrimitiveTopology( struktur );
-    if( textur )
-    {
-        if( lastTexturId == -1 || lastTexturId != textur->getId() )
-        {
-            lastTexturId = textur->getId();
-            ID3D11ShaderResourceView *v[ 3 ];
-            v[ 0 ] = *textur;
-            v[ 1 ] = *diffuseLights;
-            v[ 2 ] = *pointLights;
-            context->PSSetShaderResources( 0, 3, v );
-        }
-        context->DrawIndexed( zIndexBuffer->getElementAnzahl(), 0, 0 );
-    }
-    else
-    {
-        context->RSSetState( meshRS );
-        if( lastTexturId == -1 || lastTexturId != defaultTextur->getId() )
-        {
-            ID3D11ShaderResourceView *v[ 3 ];
-            v[ 0 ] = *defaultTextur;
-            v[ 1 ] = *diffuseLights;
-            v[ 2 ] = *pointLights;
-            lastTexturId = defaultTextur->getId();
-            context->PSSetShaderResources( 0, 3, v );
-        }
-        context->DrawIndexed( zIndexBuffer->getElementAnzahl(), 0, 0 );
-        context->RSSetState( texturRS );
-    }
-}
-
-// Gibt einen der aktuell verwendeten Shader zurück
-//  listIndex: Der Index der Lise mit Shadern, von denen der aktuell benutzte zurückgegeben werden soll
-Shader *Render3D::getShader( int listIndex ) const
-{
-    if( !shader->z( listIndex ) || !shaderId->hat( listIndex ) )
-        return 0;
-    return shader->z( listIndex )->get( shaderId->get( listIndex ) );
-}
-
-// Gibt einen der aktuell verwendeten Shader ohne erhöhten Reference Counter zurück
-//  listIndex: Der Index der Lise mit Shadern, von denen der aktuell benutzte zurückgegeben werden soll
-Shader * Render3D::zShader( int listIndex ) const
-{
-    if( !shader->z( listIndex ) || !shaderId->hat( listIndex ) )
-        return 0;
-    return shader->z( listIndex )->z( shaderId->get( listIndex ) );
-}
-
-// Gibt das momentan verwendete Device Objekt ohne erhöhten Reference Counter zurück
-ID3D11Device * Render3D::zDevice() const
-{
-    return device;
-}
-
-// Gibt das momentan verwendete Context Objekt ohne erhöhten Reference Counter zurück
-ID3D11DeviceContext *Render3D::zContext() const
-{
-    return context;
-}
-
-// Überprüft, ob eine Kugel in dem Sichtbaren Raum der Welt liegt und gezeichnet werden muss
-//  pos: Der Mittelpunkt der Kugel
-//  radius: Der Radius der Kugel
-//  dist: Einen Zeiger auf einen float, in dem das quadrat des Abstands zur Kammeraposition gespeichert wird, falls diese Funktion true zurückgiebt und der Zeiger nicht 0 ist
-bool Render3D::isInFrustrum( const Vec3< float > & pos, float radius, float *dist ) const
-{
-    for( int i = 0; i < 6; i++ )
-    {
-        if( frustrum[ i ] * pos + radius < 0 )
-            return 0;
-    }
-    if( dist )
-        * dist = kamPos.abstandSq( pos );
-    return 1;
-}
-
-// Erhöht den Reference Counting Zähler.
-//  return: this.
-Render3D * Render3D::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-//  return: 0.
-Render3D *Render3D::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
-}

+ 0 - 111
Render3D.h

@@ -1,111 +0,0 @@
-#pragma once
-
-#include "Array.h"
-#include "Mat4.h"
-#include "Ebene3D.h"
-
-struct ID3D11Device;
-struct ID3D11DeviceContext;
-enum D3D_PRIMITIVE_TOPOLOGY;
-struct ID3D11ShaderResourceView;
-struct ID3D11RasterizerState;
-
-namespace Framework
-{
-    class Shader; // Shader.h
-    class DXVertexBuffer; // DXBuffer.h
-    class DXIndexBuffer; // DXBuffer.h
-    class DXStructuredBuffer; // DXBuffer.h
-    class Textur; // Textur.h
-    class Model3D; // Model3D.h
-
-    struct DiffuseLight
-    {
-        Vec3<float> direction;
-        Vec3<float> color;
-    };
-
-    struct PointLight
-    {
-        Vec3<float> position;
-        Vec3<float> color;
-        float radius;
-    };
-
-    // Verwaltet die Zeichenfunktionen der Grafikkarte und wird zum Zeichnen von 3D Modelen verwendet. Wird von Bildschirm3D automatisch erzeugt.
-    class Render3D
-    {
-    private:
-        Mat4< float > matrixBuffer[ MAX_KNOCHEN_ANZ ];
-        float matirialBuffer[ 3 ]; // light factors (phong model)
-        Mat4< float > viewAndProj[2];
-        Ebene3D< float > frustrum[ 6 ];
-        Vec3< float > kamPos;
-        ID3D11Device *device;
-        ID3D11DeviceContext *context;
-        ID3D11RasterizerState *texturRS;
-        ID3D11RasterizerState *meshRS;
-        DXStructuredBuffer *diffuseLights;
-        DXStructuredBuffer *pointLights;
-        Textur *defaultTextur;
-        RCArray< RCArray< Shader > > *shader;
-        Array< int > *shaderId;
-        int lastObjektId;
-        int lastTexturId;
-        int ref;
-
-    public:
-        // Konstruktor
-        __declspec( dllexport ) Render3D();
-        // Destruktor
-        __declspec( dllexport ) ~Render3D();
-        // Setzt das Device, was zum zeichnen verwendet werden soll
-        //  device: Das neue Device
-        __declspec( dllexport ) void setDevice( ID3D11Device *device );
-        // Setzt das Context Objekt, das zum Zeichnen verwendet werden soll
-        //  context: das neue Conext Objekt
-        __declspec( dllexport ) void setContext( ID3D11DeviceContext *context );
-        // Setzt den aktuellen Shader. Er wird hinten an die Liste mit zuletzt verwendeten Shadern angefügt
-        //  listIndex: Der Index der Liste mit zuletzt verwendeten Shadern
-        //  sh: Der Shader, der verwendet werden soll
-        __declspec( dllexport ) void benutzeShader( int listIndex, Shader *sh );
-        // Sprinkt in der Liste mit zuletzt benutzten Shadern zurück und benutzt wieder den dortiegen Shader
-        //  listIndex: Der Index der Liste mit zuletzt verwe deten Shadern
-        //  anz: Die Anzahl der Shader, die zurückgesprungen werden soll. Bei 0 passiert nichts
-        __declspec( dllexport ) void releaseShader( int listIndex, int anz = 1 );
-        // Setzt die View und Projektion Matrizen, die zum zeichnen verwendet werden sollen
-        //  view: Die View Matrix der Kamera
-        //  proj: Die Projektion Matrix der Kamera
-        //  kamPos: Die Position der Kamera in der Welt
-        __declspec( dllexport ) void setKameraMatrix( Mat4< float > &view, Mat4< float > &proj, Vec3< float > &kamPos );
-        // Beginnt das Zeichnen eines bestimmten objektes
-        //  zMdl: Das 3D Modelohne erhöhten Reference Counter
-        __declspec( dllexport ) void beginnModel( Model3D *zMdl );
-        // Zeichnet eine bestimmte struktur
-        //  zIndexBuffer: Ein IndexBuffer, der auf verschiedene Vertices aus dem Vertex Buffer des Models zeigt. Ohne erhöhten Reference Counter
-        //  textur: Ein Zeiger auf die Textur, die verwendet werden soll ohne erhöhten Reference Counter
-        //  struktur: Die Struktur der angegebenen Indices, Beispiel: D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST oder D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP ...
-        __declspec( dllexport ) void draw( DXIndexBuffer *zIndexBuffer, Textur *zTextur, D3D_PRIMITIVE_TOPOLOGY struktur = (D3D_PRIMITIVE_TOPOLOGY)4 );
-        // Gibt einen der aktuell verwendeten Shader zurück
-        //  listIndex: Der Index der Lise mit Shadern, von denen der aktuell benutzte zurückgegeben werden soll
-        __declspec( dllexport ) Shader *getShader( int listIndex ) const;
-        // Gibt einen der aktuell verwendeten Shader ohne erhöhten Reference Counter zurück
-        //  listIndex: Der Index der Lise mit Shadern, von denen der aktuell benutzte zurückgegeben werden soll
-        __declspec( dllexport ) Shader *zShader( int listIndex ) const;
-        // Gibt das momentan verwendete Device Objekt ohne erhöhten Reference Counter zurück
-        __declspec( dllexport ) ID3D11Device *zDevice() const;
-        // Gibt das momentan verwendete Context Objekt ohne erhöhten Reference Counter zurück
-        __declspec( dllexport ) ID3D11DeviceContext *zContext() const;
-        // Überprüft, ob eine Kugel in dem Sichtbaren Raum der Welt liegt und gezeichnet werden muss
-        //  pos: Der Mittelpunkt der Kugel
-        //  radius: Der Radius der Kugel
-        //  dist: Einen Zeiger auf einen float, in dem das quadrat des Abstands zur Kammeraposition gespeichert wird, falls diese Funktion true zurückgiebt und der Zeiger nicht 0 ist
-        __declspec( dllexport ) bool isInFrustrum( const Vec3< float > &pos, float radius, float *dist = 0 ) const;
-        // Erhöht den Reference Counting Zähler.
-        //  return: this.
-        __declspec( dllexport ) Render3D *getThis();
-        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-        //  return: 0.
-        __declspec( dllexport ) Render3D *release();
-    };
-}

+ 61 - 54
Textur.cpp

@@ -1,7 +1,6 @@
 #include "Textur.h"
 #include "Bild.h"
 #ifdef WIN32
-#include "Render3D.h"
 #include <d3d11.h>
 #endif
 
@@ -13,8 +12,6 @@ using namespace Framework;
 Textur::Textur()
 {
     bild = 0;
-    txt = 0;
-    view = 0;
     lastGr = Punkt( 0, 0 );
     id = -1;
     ref = 1;
@@ -25,12 +22,6 @@ Textur::~Textur()
 {
     if( bild )
         bild->release();
-#ifdef WIN32
-    if( txt )
-        txt->Release();
-    if( view )
-        view->Release();
-#endif
 }
 
 // Setzt einen Zeiger auf das Bild, welches die Textur enthält
@@ -58,9 +49,61 @@ void Textur::setBild( Bild *b )
     b->release();
 }
 
+// Gibt einen Zeiger auf das Bild zurück
+Bild *Textur::getBild() const
+{
+    return bild ? bild->getThis() : 0;
+}
+
+// Gibt einen Zeiger auf das Bild ohne erhöhten Reference Counter zurück
+Bild *Textur::zBild() const
+{
+    return bild;
+}
+
+// Gibt die Id der Textur zurück, wenn sie in einer TexturList registriert wurde. (siehe Framework::zTexturRegister())
+int Textur::getId() const
+{
+    return id;
+}
+
+// Erhöht den Reference Counting Zähler.
+//  return: this.
+Textur *Textur::getThis()
+{
+    ref++;
+    return this;
+}
+
+// Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
+//  return: 0.
+Textur *Textur::release()
+{
+    ref--;
+    if( !ref )
+        delete this;
+    return 0;
+}
+
+
+DX11Textur::DX11Textur( ID3D11Device *device, ID3D11DeviceContext *context )
+    : Textur(),
+    txt( 0 ),
+    view( 0 ),
+    device( device ),
+    context( context )
+{}
+
+DX11Textur::~DX11Textur()
+{
+    if( txt )
+        txt->Release();
+    if( view )
+        view->Release();
+}
+
 // Aktualisiert die Textur. Die Pixel des aktuellen Bildes werden in den Graphikspeicher kopiert
-//  zRObj: Das Objekt, mit dem die Graphikkarte angesprochen wird
-bool Textur::updateTextur( Render3D *zRObj )
+bool DX11Textur::updateTextur()
 {
     if( !bild )
         return 0;
@@ -81,17 +124,17 @@ bool Textur::updateTextur( Render3D *zRObj )
         bufferDesc.SampleDesc.Count = 1;
         bufferDesc.MipLevels = 1;
         bufferDesc.Usage = D3D11_USAGE_DYNAMIC;
-        HRESULT r = zRObj->zDevice()->CreateTexture2D( &bufferDesc, 0, &txt );
+        HRESULT r = device->CreateTexture2D( &bufferDesc, 0, &txt );
         if( r != S_OK )
             return 0;
     }
     D3D11_MAPPED_SUBRESOURCE buffer;
-    zRObj->zContext()->Map( txt, 0, D3D11_MAP::D3D11_MAP_WRITE_DISCARD, 0, &buffer );
+    context->Map( txt, 0, D3D11_MAP::D3D11_MAP_WRITE_DISCARD, 0, &buffer );
     int *bgBuff = bild->getBuffer();
     int tmpBr = 4 * bild->getBreite();
     for( int y = 0, pitch = 0, bry = 0; y < bild->getHeight(); ++y, pitch += buffer.RowPitch, bry += bild->getBreite() )
-        memcpy( &( (BYTE *)buffer.pData )[ pitch ], ( void* )&( bgBuff[ bry ] ), tmpBr );
-    zRObj->zContext()->Unmap( txt, 0 );
+        memcpy( &( (BYTE *)buffer.pData )[ pitch ], ( void * ) & ( bgBuff[ bry ] ), tmpBr );
+    context->Unmap( txt, 0 );
     if( !view || lastGr != bild->getSize() )
     {
         if( view )
@@ -102,7 +145,7 @@ bool Textur::updateTextur( Render3D *zRObj )
         resourceDesk.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
         resourceDesk.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
         resourceDesk.Texture2D.MipLevels = 1;
-        HRESULT r = zRObj->zDevice()->CreateShaderResourceView( txt, &resourceDesk, &view );
+        HRESULT r = device->CreateShaderResourceView( txt, &resourceDesk, &view );
         if( r != S_OK )
             return 0;
     }
@@ -112,49 +155,13 @@ bool Textur::updateTextur( Render3D *zRObj )
 }
 
 // Gibt true zurük, wenn updateTextur aufgerufen werden muss
-bool Textur::brauchtUpdate() const
+bool DX11Textur::brauchtUpdate() const
 {
     return !view;
 }
 
-// Gibt einen Zeiger auf das Bild zurück
-Bild *Textur::getBild() const
-{
-    return bild ? bild->getThis() : 0;
-}
-
-// Gibt einen Zeiger auf das Bild ohne erhöhten Reference Counter zurück
-Bild *Textur::zBild() const
-{
-    return bild;
-}
-
-// Gibt die Id der Textur zurück, wenn sie in einer TexturList registriert wurde. (siehe Framework::zTexturRegister())
-int Textur::getId() const
-{
-    return id;
-}
-
 // Gibt die verwendtete Shader Resource View zurück
-Textur::operator ID3D11ShaderResourceView*( ) const
+DX11Textur::operator ID3D11ShaderResourceView *( ) const
 {
     return view;
-}
-
-// Erhöht den Reference Counting Zähler.
-//  return: this.
-Textur *Textur::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-//  return: 0.
-Textur *Textur::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 25 - 9
Textur.h

@@ -4,6 +4,8 @@
 
 struct ID3D11Texture2D;
 struct ID3D11ShaderResourceView;
+struct ID3D11Device;
+struct ID3D11DeviceContext;
 
 namespace Framework
 {
@@ -14,10 +16,8 @@ namespace Framework
     // Wandelt ein Bild in eine Textur um, die an die Grafikkarte zum rendern übergeben werden kann
     class Textur
     {
-    private:
+    protected:
         Bild *bild;
-        ID3D11Texture2D *txt;
-        ID3D11ShaderResourceView *view;
         Punkt lastGr;
         int id;
         int ref;
@@ -26,7 +26,7 @@ namespace Framework
         // Konstruktor
         __declspec( dllexport ) Textur();
         // Destruktor
-        __declspec( dllexport ) ~Textur();
+        __declspec( dllexport ) virtual ~Textur();
         // Setzt einen Zeiger auf das Bild, welches die Textur enthält
         //  b: Der Zeiger auf das Bild
         __declspec( dllexport ) void setBildZ( Bild *b );
@@ -34,18 +34,15 @@ namespace Framework
         //  b: Das Bild, was kopiert werden soll
         __declspec( dllexport ) void setBild( Bild *b );
         // Aktualisiert die Textur. Die Pixel des aktuellen Bildes werden in den Graphikspeicher kopiert
-        //  zRObj: Das Objekt, mit dem die Graphikkarte angesprochen wird
-        __declspec( dllexport ) bool updateTextur( Render3D *zRObj );
+        __declspec( dllexport ) virtual bool updateTextur() = 0;
         // Gibt true zurük, wenn updateTextur aufgerufen werden muss
-        __declspec( dllexport ) bool brauchtUpdate() const;
+        __declspec( dllexport ) virtual bool brauchtUpdate() const = 0;
         // Gibt einen Zeiger auf das Bild zurück
         __declspec( dllexport ) Bild *getBild() const;
         // Gibt einen Zeiger auf das Bild ohne erhöhten Reference Counter zurück
         __declspec( dllexport ) Bild *zBild() const;
         // Gibt die Id der Textur zurück, wenn sie in einer TexturList registriert wurde. (siehe Framework::zTexturRegister())
         __declspec( dllexport ) int getId() const;
-        // Gibt die verwendtete Shader Resource View zurück
-        __declspec( dllexport ) operator ID3D11ShaderResourceView*( ) const;
         // Erhöht den Reference Counting Zähler.
         //  return: this.
         __declspec( dllexport ) Textur *getThis();
@@ -55,4 +52,23 @@ namespace Framework
 
         friend TexturList;
     };
+
+    class DX11Textur : public Textur
+    {
+    private:
+        ID3D11Texture2D *txt;
+        ID3D11ShaderResourceView *view;
+        ID3D11Device *device;
+        ID3D11DeviceContext *context;
+
+    public:
+        __declspec( dllexport ) DX11Textur( ID3D11Device *device, ID3D11DeviceContext *context );
+        __declspec( dllexport ) ~DX11Textur();
+        // Aktualisiert die Textur. Die Pixel des aktuellen Bildes werden in den Graphikspeicher kopiert
+        __declspec( dllexport ) bool updateTextur() override;
+        // Gibt true zurük, wenn updateTextur aufgerufen werden muss
+        __declspec( dllexport ) bool brauchtUpdate() const override;
+        // Gibt die verwendtete Shader Resource View zurück
+        __declspec( dllexport ) operator ID3D11ShaderResourceView *( ) const;
+    };
 }

+ 0 - 2
TexturModel.cpp

@@ -29,8 +29,6 @@ TexturModel::TexturModel()
     Polygon3D *p = new Polygon3D();
     p->indexAnz = 6;
     p->indexList = new int[ p->indexAnz ];
-    p->indexBuffer->setLength( p->indexAnz * 4 );
-    p->indexBuffer->setData( p->indexList );
     p->indexList[ 0 ] = 0;
     p->indexList[ 1 ] = 3;
     p->indexList[ 2 ] = 2;

+ 495 - 4440
UIPixelShader.h

@@ -88,7 +88,7 @@
 // SV_TARGET                0   xyzw        0   TARGET   float   xyzw
 //
 ps_5_0
-dcl_globalFlags refactoringAllowed | skipOptimization
+dcl_globalFlags refactoringAllowed
 dcl_constantbuffer CB0[1], immediateIndexed
 dcl_constantbuffer CB1[1], immediateIndexed
 dcl_constantbuffer CB2[1], immediateIndexed
@@ -100,4617 +100,672 @@ dcl_input_ps linear v0.xyz
 dcl_input_ps linear v2.xy
 dcl_input_ps linear v3.xyz
 dcl_output o0.xyzw
-dcl_temps 6
-//
-// Initial variable locations:
-//   v0.x <- input.worldPos.x; v0.y <- input.worldPos.y; v0.z <- input.worldPos.z; v0.w <- input.worldPos.w; 
-//   v1.x <- input.position.x; v1.y <- input.position.y; v1.z <- input.position.z; v1.w <- input.position.w; 
-//   v2.x <- input.tex.x; v2.y <- input.tex.y; 
-//   v3.x <- input.normal.x; v3.y <- input.normal.y; v3.z <- input.normal.z; 
-//   o0.x <- <TexturePixelShader return value>.x; o0.y <- <TexturePixelShader return value>.y; o0.z <- <TexturePixelShader return value>.z; o0.w <- <TexturePixelShader return value>.w
-//
-#line 60 "C:\Users\kolja\OneDrive\Desktop\Kolja-Strohm-Games\Allgemein\Framework\UIPixelShader.hlsl"
-itof r0.xyz, l(0, 0, 0, 0)  // r0.x <- diffuseLight.x; r0.y <- diffuseLight.y; r0.z <- diffuseLight.z
-
-#line 61
-itof r1.xyz, l(0, 0, 0, 0)  // r1.x <- specularLight.x; r1.y <- specularLight.y; r1.z <- specularLight.z
-
-#line 62
-mov r0.w, l(0)  // r0.w <- j
-mov r2.xyz, r0.xyzx  // r2.x <- diffuseLight.x; r2.y <- diffuseLight.y; r2.z <- diffuseLight.z
-mov r1.w, r0.w  // r1.w <- j
+dcl_temps 7
+mov r0.xyzw, l(0,0,0,0)
 loop 
-  ilt r2.w, r1.w, cb2[0].x
-  breakc_z r2.w
-
-#line 64
-  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.x, r1.w, l(0), t1.xxxx
-  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.y, r1.w, l(4), t1.xxxx
-  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.z, r1.w, l(8), t1.xxxx
-  mov r3.xyz, -r3.xyzx
-  dp3 r2.w, v3.xyzx, r3.xyzx
-  itof r3.x, l(0)
-  lt r2.w, r2.w, r3.x
-  if_nz r2.w
-
-#line 65
-    iadd r1.w, r1.w, l(1)
+  ige r1.x, r0.w, cb2[0].x
+  breakc_nz r1.x
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r1.xyz, r0.w, l(0), t1.xyzx
+  dp3 r1.x, v3.xyzx, -r1.xyzx
+  lt r1.x, r1.x, l(0.000000)
+  if_nz r1.x
+    iadd r1.x, r0.w, l(1)
+    mov r0.w, r1.x
     continue 
   endif 
-
-#line 66
-  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.x, r1.w, l(12), t1.xxxx
-  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.y, r1.w, l(16), t1.xxxx
-  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r3.z, r1.w, l(20), t1.xxxx
-  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r4.x, r1.w, l(0), t1.xxxx
-  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r4.y, r1.w, l(4), t1.xxxx
-  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r4.z, r1.w, l(8), t1.xxxx
-  mov r4.xyz, -r4.xyzx
-  dp3 r2.w, v3.xyzx, r4.xyzx
-  mul r3.xyz, r2.wwww, r3.xyzx
-  add r2.xyz, r2.xyzx, r3.xyzx
-
-#line 62
-  iadd r1.w, r1.w, l(1)
-
-#line 67
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r1.xy, r0.w, l(0), t1.xyxx
+  ld_structured_indexable(structured_buffer, stride=24)(mixed,mixed,mixed,mixed) r2.xyzw, r0.w, l(8), t1.xyzw
+  mov r1.z, r2.x
+  dp3 r1.x, v3.xyzx, -r1.xyzx
+  mad r0.xyz, r2.yzwy, r1.xxxx, r0.xyzx
+  iadd r0.w, r0.w, l(1)
 endloop 
-
-#line 68
-mov r0.x, l(0)  // r0.x <- i
-mov r0.yzw, r2.xxyz  // r0.y <- diffuseLight.x; r0.z <- diffuseLight.y; r0.w <- diffuseLight.z
-mov r3.xyz, r1.xyzx  // r3.x <- specularLight.x; r3.y <- specularLight.y; r3.z <- specularLight.z
-mov r1.w, r0.x  // r1.w <- i
+add r1.xyz, -v0.xyzx, cb0[0].xyzx
+dp3 r0.w, r1.xyzx, r1.xyzx
+rsq r0.w, r0.w
+mul r1.xyz, r0.wwww, r1.xyzx
+mov r2.xyz, r0.xyzx
+mov r3.xyz, l(0,0,0,0)
+mov r0.w, l(0)
 loop 
-  ilt r2.w, r1.w, cb2[0].y
-  breakc_z r2.w
-
-#line 70
-  ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.x, r1.w, l(0), t2.xxxx
-  ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.y, r1.w, l(4), t2.xxxx
-  ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.z, r1.w, l(8), t2.xxxx
-  mov r5.xyz, -v0.xyzx
-  add r4.xyz, r4.xyzx, r5.xyzx  // r4.x <- lightDir.x; r4.y <- lightDir.y; r4.z <- lightDir.z
-
-#line 71
-  ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r2.w, r1.w, l(24), t2.xxxx
-  dp3 r3.w, r4.xyzx, r4.xyzx
-  sqrt r3.w, r3.w
-  div r2.w, r2.w, r3.w  // r2.w <- factor
-
-#line 72
-  dp3 r3.w, r4.xyzx, r4.xyzx
-  rsq r3.w, r3.w
-  mul r5.xyz, r3.wwww, r4.xyzx
-  dp3 r3.w, v3.xyzx, r5.xyzx  // r3.w <- f
-
-#line 73
-  itof r4.w, l(0)
-  lt r4.w, r4.w, r3.w
-  if_nz r4.w
-
-#line 75
-    ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r5.x, r1.w, l(12), t2.xxxx
-    ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r5.y, r1.w, l(16), t2.xxxx
-    ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r5.z, r1.w, l(20), t2.xxxx
-    mul r5.xyz, r3.wwww, r5.xyzx
-    mul r5.xyz, r2.wwww, r5.xyzx
-    add r0.yzw, r0.yyzw, r5.xxyz
-
-#line 76
-    mov r4.xyz, -r4.xyzx
-    dp3 r3.w, r4.xyzx, r4.xyzx
-    rsq r3.w, r3.w
-    mul r4.xyz, r3.wwww, r4.xyzx
-    dp3 r3.w, r4.xyzx, v3.xyzx
-    add r3.w, r3.w, r3.w
-    mov r3.w, -r3.w
-    mul r5.xyz, r3.wwww, v3.xyzx
-    add r4.xyz, r4.xyzx, r5.xyzx
-    dp3 r3.w, r4.xyzx, r4.xyzx
-    rsq r3.w, r3.w
-    mul r4.xyz, r3.wwww, r4.xyzx
-    mov r5.xyz, -v0.xyzx
-    add r5.xyz, r5.xyzx, cb0[0].xyzx
-    dp3 r3.w, r5.xyzx, r5.xyzx
-    rsq r3.w, r3.w
-    mul r5.xyz, r3.wwww, r5.xyzx
-    dp3 r3.w, r4.xyzx, r5.xyzx  // r3.w <- f
-
-#line 77
-    itof r4.x, l(0)
-    lt r4.x, r4.x, r3.w
-    if_nz r4.x
-
-#line 78
-      ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.x, r1.w, l(12), t2.xxxx
-      ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.y, r1.w, l(16), t2.xxxx
-      ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.z, r1.w, l(20), t2.xxxx
-      mul r4.xyz, r3.wwww, r4.xyzx
-      mul r4.xyz, r2.wwww, r4.xyzx
-      add r3.xyz, r3.xyzx, r4.xyzx
-    endif 
-
-#line 79
+  ige r1.w, r0.w, cb2[0].y
+  breakc_nz r1.w
+  ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r4.xyz, r0.w, l(0), t2.xyzx
+  add r4.xyz, r4.xyzx, -v0.xyzx
+  dp3 r1.w, r4.xyzx, r4.xyzx
+  rsq r2.w, r1.w
+  mul r5.xyz, r2.wwww, r4.xyzx
+  dp3 r2.w, v3.xyzx, r5.xyzx
+  lt r3.w, l(0.000000), r2.w
+  if_nz r3.w
+    ld_structured_indexable(structured_buffer, stride=28)(mixed,mixed,mixed,mixed) r5.xyzw, r0.w, l(12), t2.xyzw
+    sqrt r1.w, r1.w
+    div r1.w, r5.w, r1.w
+    mul r6.xyz, r2.wwww, r5.xyzx
+    mad r2.xyz, r6.xyzx, r1.wwww, r2.xyzx
+    dp3 r2.w, -r4.xyzx, -r4.xyzx
+    rsq r2.w, r2.w
+    mul r4.xyz, r2.wwww, -r4.xyzx
+    dp3 r2.w, r4.xyzx, v3.xyzx
+    add r2.w, r2.w, r2.w
+    mad r4.xyz, v3.xyzx, -r2.wwww, r4.xyzx
+    dp3 r2.w, r4.xyzx, r4.xyzx
+    rsq r2.w, r2.w
+    mul r4.xyz, r2.wwww, r4.xyzx
+    dp3 r2.w, r4.xyzx, r1.xyzx
+    lt r3.w, l(0.000000), r2.w
+    mul r4.xyz, r2.wwww, r5.xyzx
+    mad r4.xyz, r4.xyzx, r1.wwww, r3.xyzx
+    movc r3.xyz, r3.wwww, r4.xyzx, r3.xyzx
   endif 
-
-#line 80
-  iadd r1.w, r1.w, l(1)
+  iadd r0.w, r0.w, l(1)
 endloop 
-
-#line 81
-sample_indexable(texture2d)(float,float,float,float) r1.xyzw, v2.xyxx, t0.xyzw, s0  // r1.x <- materialColor.x; r1.y <- materialColor.y; r1.z <- materialColor.z; r1.w <- materialColor.w
-
-#line 82
-mul r1.xyz, r1.xyzx, cb1[0].xxxx
-mul r0.xyz, r0.yzwy, cb1[0].yyyy
-add r0.xyz, r0.xyzx, r1.xyzx
-mul r1.xyz, r3.xyzx, cb1[0].zzzz
-add r0.xyz, r0.xyzx, r1.xyzx
-max r0.xyz, r0.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
-min r0.xyz, r0.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)  // r0.x <- textureColor.x; r0.y <- textureColor.y; r0.z <- textureColor.z
-
-#line 83
-mov r1.w, r1.w  // r1.w <- textureColor.w
-
-#line 84
-mov o0.xyz, r0.xyzx
-mov o0.w, r1.w
+sample_indexable(texture2d)(float,float,float,float) r0.xyzw, v2.xyxx, t0.xyzw, s0
+mul r1.xyz, r2.xyzx, cb1[0].yyyy
+mad r0.xyz, r0.xyzx, cb1[0].xxxx, r1.xyzx
+mad_sat o0.xyz, r3.xyzx, cb1[0].zzzz, r0.xyzx
+mov o0.w, r0.w
 ret 
-// Approximately 103 instruction slots used
+// Approximately 65 instruction slots used
 #endif
 
 const BYTE UIPixelShader[] =
 {
-     68,  88,  66,  67, 232,  86, 
-    248, 223, 236, 211,  56, 103, 
-     78, 101, 231, 223, 206,  95, 
-    170, 222,   1,   0,   0,   0, 
-    136, 104,   0,   0,   6,   0, 
-      0,   0,  56,   0,   0,   0, 
-    124,   5,   0,   0,  12,   6, 
-      0,   0,  64,   6,   0,   0, 
-    228,  17,   0,   0, 128,  18, 
-      0,   0,  82,  68,  69,  70, 
-     60,   5,   0,   0,   5,   0, 
-      0,   0, 108,   1,   0,   0, 
-      7,   0,   0,   0,  60,   0, 
-      0,   0,   0,   5, 255, 255, 
-      5,   1,   0,   0,  20,   5, 
-      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,  28,   1, 
-      0,   0,   3,   0,   0,   0, 
+     68,  88,  66,  67, 214,  30, 
+    129, 152, 232,  92,   8,  31, 
+     88, 232, 203,  21, 146, 219, 
+    131,  18,   1,   0,   0,   0, 
+     52,  14,   0,   0,   5,   0, 
+      0,   0,  52,   0,   0,   0, 
+    120,   5,   0,   0,   8,   6, 
+      0,   0,  60,   6,   0,   0, 
+    152,  13,   0,   0,  82,  68, 
+     69,  70,  60,   5,   0,   0, 
+      5,   0,   0,   0, 108,   1, 
+      0,   0,   7,   0,   0,   0, 
+     60,   0,   0,   0,   0,   5, 
+    255, 255,   0,   1,   0,   0, 
+     20,   5,   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, 
+     28,   1,   0,   0,   3,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
-     39,   1,   0,   0,   2,   0, 
-      0,   0,   5,   0,   0,   0, 
-      4,   0,   0,   0, 255, 255, 
-    255, 255,   0,   0,   0,   0, 
-      1,   0,   0,   0,  13,   0, 
-      0,   0,  53,   1,   0,   0, 
-      5,   0,   0,   0,   6,   0, 
-      0,   0,   1,   0,   0,   0, 
-     24,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  39,   1,   0,   0, 
+      2,   0,   0,   0,   5,   0, 
+      0,   0,   4,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
       0,   0,   1,   0,   0,   0, 
-      1,   0,   0,   0,  66,   1, 
+     13,   0,   0,   0,  53,   1, 
       0,   0,   5,   0,   0,   0, 
       6,   0,   0,   0,   1,   0, 
-      0,   0,  28,   0,   0,   0, 
-      2,   0,   0,   0,   1,   0, 
+      0,   0,  24,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+     66,   1,   0,   0,   5,   0, 
+      0,   0,   6,   0,   0,   0, 
+      1,   0,   0,   0,  28,   0, 
+      0,   0,   2,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  78,   1,   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, 
-     78,   1,   0,   0,   0,   0, 
+      1,   0,   0,   0,  85,   1, 
       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,  85,   1,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+     94,   1,   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,  83,  97, 109, 112, 
+    108, 101,  84, 121, 112, 101, 
+      0, 115, 104,  97, 100, 101, 
+    114,  84, 101, 120, 116, 117, 
+    114, 101,   0, 100, 105, 102, 
+    117, 115, 101,  76, 105, 103, 
+    104, 116, 115,   0, 112, 111, 
+    105, 110, 116,  76, 105, 103, 
+    104, 116, 115,   0,  75,  97, 
+    109, 101, 114,  97,   0,  77, 
+     97, 116, 101, 114, 105,  97, 
+    108,   0,  76, 105, 103, 104, 
+    116,  67, 111, 117, 110, 116, 
+      0, 171, 171, 171,  78,   1, 
       0,   0,   1,   0,   0,   0, 
-      1,   0,   0,   0,  94,   1, 
+    228,   1,   0,   0,  16,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  85,   1, 
+      0,   0,   3,   0,   0,   0, 
+     68,   2,   0,   0,  16,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  94,   1, 
+      0,   0,   2,   0,   0,   0, 
+     16,   3,   0,   0,  16,   0, 
       0,   0,   0,   0,   0,   0, 
-      2,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,  53,   1, 
       0,   0,   1,   0,   0,   0, 
-     83,  97, 109, 112, 108, 101, 
-     84, 121, 112, 101,   0, 115, 
-    104,  97, 100, 101, 114,  84, 
-    101, 120, 116, 117, 114, 101, 
-      0, 100, 105, 102, 117, 115, 
-    101,  76, 105, 103, 104, 116, 
-    115,   0, 112, 111, 105, 110, 
-    116,  76, 105, 103, 104, 116, 
-    115,   0,  75,  97, 109, 101, 
-    114,  97,   0,  77,  97, 116, 
-    101, 114, 105,  97, 108,   0, 
-     76, 105, 103, 104, 116,  67, 
-    111, 117, 110, 116,   0, 171, 
-    171, 171,  78,   1,   0,   0, 
-      1,   0,   0,   0, 228,   1, 
-      0,   0,  16,   0,   0,   0, 
+    172,   3,   0,   0,  24,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  85,   1,   0,   0, 
-      3,   0,   0,   0,  68,   2, 
-      0,   0,  16,   0,   0,   0, 
+      3,   0,   0,   0,  66,   1, 
+      0,   0,   1,   0,   0,   0, 
+    100,   4,   0,   0,  28,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  94,   1,   0,   0, 
-      2,   0,   0,   0,  16,   3, 
-      0,   0,  16,   0,   0,   0, 
+      3,   0,   0,   0,  12,   2, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,  53,   1,   0,   0, 
-      1,   0,   0,   0, 172,   3, 
-      0,   0,  24,   0,   0,   0, 
-      0,   0,   0,   0,   3,   0, 
-      0,   0,  66,   1,   0,   0, 
-      1,   0,   0,   0, 100,   4, 
-      0,   0,  28,   0,   0,   0, 
-      0,   0,   0,   0,   3,   0, 
-      0,   0,  12,   2,   0,   0, 
-      0,   0,   0,   0,  16,   0, 
-      0,   0,   2,   0,   0,   0, 
-     32,   2,   0,   0,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
+     16,   0,   0,   0,   2,   0, 
+      0,   0,  32,   2,   0,   0, 
       0,   0,   0,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
-    107,  80, 111, 115, 105, 116, 
-    105, 111, 110,   0, 102, 108, 
-    111,  97, 116,  52,   0, 171, 
-    171, 171,   1,   0,   3,   0, 
-      1,   0,   4,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 107,  80, 111, 115, 
+    105, 116, 105, 111, 110,   0, 
+    102, 108, 111,  97, 116,  52, 
+      0, 171, 171, 171,   1,   0, 
+      3,   0,   1,   0,   4,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  22,   2, 
-      0,   0, 188,   2,   0,   0, 
-      0,   0,   0,   0,   4,   0, 
-      0,   0,   2,   0,   0,   0, 
-    208,   2,   0,   0,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-      0,   0,   0,   0, 255, 255, 
-    255, 255,   0,   0,   0,   0, 
-    244,   2,   0,   0,   4,   0, 
-      0,   0,   4,   0,   0,   0, 
-      2,   0,   0,   0, 208,   2, 
       0,   0,   0,   0,   0,   0, 
-    255, 255, 255, 255,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-      0,   0,   0,   0,   1,   3, 
-      0,   0,   8,   0,   0,   0, 
+     22,   2,   0,   0, 188,   2, 
+      0,   0,   0,   0,   0,   0, 
       4,   0,   0,   0,   2,   0, 
       0,   0, 208,   2,   0,   0, 
       0,   0,   0,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
     255, 255, 255, 255,   0,   0, 
-      0,   0,  97, 109,  98, 105, 
-    101, 110, 116,  70,  97,  99, 
-    116, 111, 114,   0, 102, 108, 
-    111,  97, 116,   0,   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, 
-    202,   2,   0,   0, 100, 105, 
-    102, 102, 117, 115,  70,  97, 
-     99, 116, 111, 114,   0, 115, 
-    112, 101,  99, 117, 108,  97, 
-    114,  70,  97,  99, 116, 111, 
-    114,   0,  96,   3,   0,   0, 
-      0,   0,   0,   0,   4,   0, 
+      0,   0, 244,   2,   0,   0, 
+      4,   0,   0,   0,   4,   0, 
       0,   0,   2,   0,   0,   0, 
-    120,   3,   0,   0,   0,   0, 
+    208,   2,   0,   0,   0,   0, 
       0,   0, 255, 255, 255, 255, 
       0,   0,   0,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
-    156,   3,   0,   0,   4,   0, 
+      1,   3,   0,   0,   8,   0, 
       0,   0,   4,   0,   0,   0, 
-      2,   0,   0,   0, 120,   3, 
+      2,   0,   0,   0, 208,   2, 
       0,   0,   0,   0,   0,   0, 
     255, 255, 255, 255,   0,   0, 
       0,   0, 255, 255, 255, 255, 
-      0,   0,   0,   0, 100, 105, 
-    102, 102, 117, 115, 101,  76, 
-    105, 103, 104, 116,  67, 111, 
-    117, 110, 116,   0, 105, 110, 
-    116,   0, 171, 171,   0,   0, 
-      2,   0,   1,   0,   1,   0, 
+      0,   0,   0,   0,  97, 109, 
+     98, 105, 101, 110, 116,  70, 
+     97,  99, 116, 111, 114,   0, 
+    102, 108, 111,  97, 116,   0, 
+      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, 202,   2,   0,   0, 
+    100, 105, 102, 102, 117, 115, 
+     70,  97,  99, 116, 111, 114, 
+      0, 115, 112, 101,  99, 117, 
+    108,  97, 114,  70,  97,  99, 
+    116, 111, 114,   0,  96,   3, 
       0,   0,   0,   0,   0,   0, 
-    114,   3,   0,   0, 112, 111, 
-    105, 110, 116,  76, 105, 103, 
-    104, 116,  67, 111, 117, 110, 
-    116,   0, 212,   3,   0,   0, 
-      0,   0,   0,   0,  24,   0, 
+      4,   0,   0,   0,   2,   0, 
+      0,   0, 120,   3,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0, 156,   3,   0,   0, 
+      4,   0,   0,   0,   4,   0, 
       0,   0,   2,   0,   0,   0, 
-     64,   4,   0,   0,   0,   0, 
+    120,   3,   0,   0,   0,   0, 
       0,   0, 255, 255, 255, 255, 
       0,   0,   0,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
-     36,  69, 108, 101, 109, 101, 
-    110, 116,   0,  68, 105, 102, 
-    102, 117, 115, 101,  76, 105, 
-    103, 104, 116,   0, 100, 105, 
-    114, 101,  99, 116, 105, 111, 
-    110,   0, 102, 108, 111,  97, 
-    116,  51,   0, 171,   1,   0, 
-      3,   0,   1,   0,   3,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-    244,   3,   0,   0,  99, 111, 
-    108, 111, 114,   0, 171, 171, 
-    234,   3,   0,   0, 252,   3, 
+    100, 105, 102, 102, 117, 115, 
+    101,  76, 105, 103, 104, 116, 
+     67, 111, 117, 110, 116,   0, 
+    105, 110, 116,   0, 171, 171, 
+      0,   0,   2,   0,   1,   0, 
+      1,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     32,   4,   0,   0, 252,   3, 
-      0,   0,  12,   0,   0,   0, 
-      5,   0,   0,   0,   1,   0, 
-      6,   0,   0,   0,   2,   0, 
-     40,   4,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 221,   3,   0,   0, 
-    212,   3,   0,   0,   0,   0, 
-      0,   0,  28,   0,   0,   0, 
-      2,   0,   0,   0, 240,   4, 
+      0,   0, 114,   3,   0,   0, 
+    112, 111, 105, 110, 116,  76, 
+    105, 103, 104, 116,  67, 111, 
+    117, 110, 116,   0, 212,   3, 
       0,   0,   0,   0,   0,   0, 
+     24,   0,   0,   0,   2,   0, 
+      0,   0,  64,   4,   0,   0, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
     255, 255, 255, 255,   0,   0, 
-      0,   0, 255, 255, 255, 255, 
-      0,   0,   0,   0,  80, 111, 
-    105, 110, 116,  76, 105, 103, 
-    104, 116,   0, 112, 111, 115, 
-    105, 116, 105, 111, 110,   0, 
-    114,  97, 100, 105, 117, 115, 
-      0, 171,   0,   0,   3,   0, 
-      1,   0,   1,   0,   0,   0, 
+      0,   0,  36,  69, 108, 101, 
+    109, 101, 110, 116,   0,  68, 
+    105, 102, 102, 117, 115, 101, 
+     76, 105, 103, 104, 116,   0, 
+    100, 105, 114, 101,  99, 116, 
+    105, 111, 110,   0, 102, 108, 
+    111,  97, 116,  51,   0, 171, 
+      1,   0,   3,   0,   1,   0, 
+      3,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 202,   2, 
-      0,   0, 151,   4,   0,   0, 
+      0,   0, 244,   3,   0,   0, 
+     99, 111, 108, 111, 114,   0, 
+    171, 171, 234,   3,   0,   0, 
     252,   3,   0,   0,   0,   0, 
       0,   0,  32,   4,   0,   0, 
     252,   3,   0,   0,  12,   0, 
-      0,   0, 160,   4,   0,   0, 
-    168,   4,   0,   0,  24,   0, 
       0,   0,   5,   0,   0,   0, 
-      1,   0,   7,   0,   0,   0, 
-      3,   0, 204,   4,   0,   0, 
+      1,   0,   6,   0,   0,   0, 
+      2,   0,  40,   4,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 140,   4, 
-      0,   0,  77, 105,  99, 114, 
-    111, 115, 111, 102, 116,  32, 
-     40,  82,  41,  32,  72,  76, 
-     83,  76,  32,  83, 104,  97, 
-    100, 101, 114,  32,  67, 111, 
-    109, 112, 105, 108, 101, 114, 
-     32,  49,  48,  46,  49,   0, 
-     73,  83,  71,  78, 136,   0, 
-      0,   0,   4,   0,   0,   0, 
-      8,   0,   0,   0, 104,   0, 
+      0,   0,   0,   0, 221,   3, 
+      0,   0, 212,   3,   0,   0, 
+      0,   0,   0,   0,  28,   0, 
+      0,   0,   2,   0,   0,   0, 
+    240,   4,   0,   0,   0,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+     80, 111, 105, 110, 116,  76, 
+    105, 103, 104, 116,   0, 112, 
+    111, 115, 105, 116, 105, 111, 
+    110,   0, 114,  97, 100, 105, 
+    117, 115,   0, 171,   0,   0, 
+      3,   0,   1,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   3,   0, 
       0,   0,   0,   0,   0,   0, 
-     15,   7,   0,   0, 113,   0, 
       0,   0,   0,   0,   0,   0, 
-      1,   0,   0,   0,   3,   0, 
-      0,   0,   1,   0,   0,   0, 
-     15,   0,   0,   0, 125,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   3,   0, 
-      0,   0,   2,   0,   0,   0, 
-      3,   3,   0,   0, 125,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0,   3,   0, 
-      0,   0,   3,   0,   0,   0, 
-      7,   7,   0,   0,  80,  79, 
-     83,  73,  84,  73,  79,  78, 
-      0,  83,  86,  95,  80,  79, 
-     83,  73,  84,  73,  79,  78, 
-      0,  84,  69,  88,  67,  79, 
-     79,  82,  68,   0, 171, 171, 
-     79,  83,  71,  78,  44,   0, 
-      0,   0,   1,   0,   0,   0, 
-      8,   0,   0,   0,  32,   0, 
+    202,   2,   0,   0, 151,   4, 
+      0,   0, 252,   3,   0,   0, 
+      0,   0,   0,   0,  32,   4, 
+      0,   0, 252,   3,   0,   0, 
+     12,   0,   0,   0, 160,   4, 
+      0,   0, 168,   4,   0,   0, 
+     24,   0,   0,   0,   5,   0, 
+      0,   0,   1,   0,   7,   0, 
+      0,   0,   3,   0, 204,   4, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   3,   0, 
       0,   0,   0,   0,   0,   0, 
-     15,   0,   0,   0,  83,  86, 
-     95,  84,  65,  82,  71,  69, 
-     84,   0, 171, 171,  83,  72, 
-     69,  88, 156,  11,   0,   0, 
-     80,   0,   0,   0, 231,   2, 
-      0,   0, 106, 136,   0,   1, 
-     89,   0,   0,   4,  70, 142, 
+      0,   0,   0,   0,   0,   0, 
+    140,   4,   0,   0,  77, 105, 
+     99, 114, 111, 115, 111, 102, 
+    116,  32,  40,  82,  41,  32, 
+     72,  76,  83,  76,  32,  83, 
+    104,  97, 100, 101, 114,  32, 
+     67, 111, 109, 112, 105, 108, 
+    101, 114,  32,  49,  48,  46, 
+     49,   0,  73,  83,  71,  78, 
+    136,   0,   0,   0,   4,   0, 
+      0,   0,   8,   0,   0,   0, 
+    104,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  15,   7,   0,   0, 
+    113,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,  15,   0,   0,   0, 
+    125,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   2,   0, 
+      0,   0,   3,   3,   0,   0, 
+    125,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   3,   0, 
+      0,   0,   7,   7,   0,   0, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,   0,  83,  86,  95, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,   0,  84,  69,  88, 
+     67,  79,  79,  82,  68,   0, 
+    171, 171,  79,  83,  71,  78, 
+     44,   0,   0,   0,   1,   0, 
+      0,   0,   8,   0,   0,   0, 
      32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  15,   0,   0,   0, 
+     83,  86,  95,  84,  65,  82, 
+     71,  69,  84,   0, 171, 171, 
+     83,  72,  69,  88,  84,   7, 
+      0,   0,  80,   0,   0,   0, 
+    213,   1,   0,   0, 106,   8, 
+      0,   1,  89,   0,   0,   4, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   1,   0,   0,   0, 
       1,   0,   0,   0,  89,   0, 
       0,   4,  70, 142,  32,   0, 
-      1,   0,   0,   0,   1,   0, 
-      0,   0,  89,   0,   0,   4, 
-     70, 142,  32,   0,   2,   0, 
-      0,   0,   1,   0,   0,   0, 
-     90,   0,   0,   3,   0,  96, 
-     16,   0,   0,   0,   0,   0, 
-     88,  24,   0,   4,   0, 112, 
-     16,   0,   0,   0,   0,   0, 
-     85,  85,   0,   0, 162,   0, 
+      2,   0,   0,   0,   1,   0, 
+      0,   0,  90,   0,   0,   3, 
+      0,  96,  16,   0,   0,   0, 
+      0,   0,  88,  24,   0,   4, 
+      0, 112,  16,   0,   0,   0, 
+      0,   0,  85,  85,   0,   0, 
+    162,   0,   0,   4,   0, 112, 
+     16,   0,   1,   0,   0,   0, 
+     24,   0,   0,   0, 162,   0, 
       0,   4,   0, 112,  16,   0, 
-      1,   0,   0,   0,  24,   0, 
-      0,   0, 162,   0,   0,   4, 
-      0, 112,  16,   0,   2,   0, 
-      0,   0,  28,   0,   0,   0, 
-     98,  16,   0,   3, 114,  16, 
-     16,   0,   0,   0,   0,   0, 
-     98,  16,   0,   3,  50,  16, 
-     16,   0,   2,   0,   0,   0, 
-     98,  16,   0,   3, 114,  16, 
-     16,   0,   3,   0,   0,   0, 
-    101,   0,   0,   3, 242,  32, 
-     16,   0,   0,   0,   0,   0, 
-    104,   0,   0,   2,   6,   0, 
-      0,   0,  43,   0,   0,   8, 
-    114,   0,  16,   0,   0,   0, 
-      0,   0,   2,  64,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  43,   0, 
-      0,   8, 114,   0,  16,   0, 
-      1,   0,   0,   0,   2,  64, 
+      2,   0,   0,   0,  28,   0, 
+      0,   0,  98,  16,   0,   3, 
+    114,  16,  16,   0,   0,   0, 
+      0,   0,  98,  16,   0,   3, 
+     50,  16,  16,   0,   2,   0, 
+      0,   0,  98,  16,   0,   3, 
+    114,  16,  16,   0,   3,   0, 
+      0,   0, 101,   0,   0,   3, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0, 104,   0,   0,   2, 
+      7,   0,   0,   0,  54,   0, 
+      0,   8, 242,   0,  16,   0, 
+      0,   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,  54,   0,   0,   5, 
-    114,   0,  16,   0,   2,   0, 
-      0,   0,  70,   2,  16,   0, 
-      0,   0,   0,   0,  54,   0, 
-      0,   5, 130,   0,  16,   0, 
+     48,   0,   0,   1,  33,   0, 
+      0,   8,  18,   0,  16,   0, 
       1,   0,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
-     48,   0,   0,   1,  34,   0, 
-      0,   8, 130,   0,  16,   0, 
-      2,   0,   0,   0,  58,   0, 
-     16,   0,   1,   0,   0,   0, 
      10, 128,  32,   0,   2,   0, 
       0,   0,   0,   0,   0,   0, 
-      3,   0,   0,   3,  58,   0, 
-     16,   0,   2,   0,   0,   0, 
+      3,   0,   4,   3,  10,   0, 
+     16,   0,   1,   0,   0,   0, 
     167,   0,   0, 139,   2, 195, 
       0, 128, 131, 153,  25,   0, 
-     18,   0,  16,   0,   3,   0, 
+    114,   0,  16,   0,   1,   0, 
       0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,   0,   0,   0,   0, 
-      6, 112,  16,   0,   1,   0, 
-      0,   0, 167,   0,   0, 139, 
-      2, 195,   0, 128, 131, 153, 
-     25,   0,  34,   0,  16,   0, 
-      3,   0,   0,   0,  58,   0, 
-     16,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0,   4,   0, 
-      0,   0,   6, 112,  16,   0, 
-      1,   0,   0,   0, 167,   0, 
-      0, 139,   2, 195,   0, 128, 
-    131, 153,  25,   0,  66,   0, 
-     16,   0,   3,   0,   0,   0, 
-     58,   0,  16,   0,   1,   0, 
-      0,   0,   1,  64,   0,   0, 
-      8,   0,   0,   0,   6, 112, 
-     16,   0,   1,   0,   0,   0, 
-     54,   0,   0,   6, 114,   0, 
-     16,   0,   3,   0,   0,   0, 
-     70,   2,  16, 128,  65,   0, 
-      0,   0,   3,   0,   0,   0, 
-     16,   0,   0,   7, 130,   0, 
-     16,   0,   2,   0,   0,   0, 
-     70,  18,  16,   0,   3,   0, 
-      0,   0,  70,   2,  16,   0, 
-      3,   0,   0,   0,  43,   0, 
-      0,   5,  18,   0,  16,   0, 
-      3,   0,   0,   0,   1,  64, 
+      0,   0,   0,   0,   1,  64, 
       0,   0,   0,   0,   0,   0, 
-     49,   0,   0,   7, 130,   0, 
-     16,   0,   2,   0,   0,   0, 
-     58,   0,  16,   0,   2,   0, 
-      0,   0,  10,   0,  16,   0, 
-      3,   0,   0,   0,  31,   0, 
-      4,   3,  58,   0,  16,   0, 
-      2,   0,   0,   0,  30,   0, 
-      0,   7, 130,   0,  16,   0, 
-      1,   0,   0,   0,  58,   0, 
+     70, 114,  16,   0,   1,   0, 
+      0,   0,  16,   0,   0,   8, 
+     18,   0,  16,   0,   1,   0, 
+      0,   0,  70,  18,  16,   0, 
+      3,   0,   0,   0,  70,   2, 
+     16, 128,  65,   0,   0,   0, 
+      1,   0,   0,   0,  49,   0, 
+      0,   7,  18,   0,  16,   0, 
+      1,   0,   0,   0,  10,   0, 
      16,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0,   1,   0, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0,  31,   0,   4,   3, 
+     10,   0,  16,   0,   1,   0, 
+      0,   0,  30,   0,   0,   7, 
+     18,   0,  16,   0,   1,   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, 
+     10,   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,  18,   0, 
-     16,   0,   3,   0,   0,   0, 
-     58,   0,  16,   0,   1,   0, 
-      0,   0,   1,  64,   0,   0, 
-     12,   0,   0,   0,   6, 112, 
-     16,   0,   1,   0,   0,   0, 
-    167,   0,   0, 139,   2, 195, 
-      0, 128, 131, 153,  25,   0, 
-     34,   0,  16,   0,   3,   0, 
-      0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,  16,   0,   0,   0, 
-      6, 112,  16,   0,   1,   0, 
-      0,   0, 167,   0,   0, 139, 
-      2, 195,   0, 128, 131, 153, 
-     25,   0,  66,   0,  16,   0, 
-      3,   0,   0,   0,  58,   0, 
+    131, 153,  25,   0,  50,   0, 
      16,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0,  20,   0, 
-      0,   0,   6, 112,  16,   0, 
-      1,   0,   0,   0, 167,   0, 
-      0, 139,   2, 195,   0, 128, 
-    131, 153,  25,   0,  18,   0, 
-     16,   0,   4,   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,   6, 112, 
+      0,   0,   0,   0,  70, 112, 
      16,   0,   1,   0,   0,   0, 
     167,   0,   0, 139,   2, 195, 
       0, 128, 131, 153,  25,   0, 
-     34,   0,  16,   0,   4,   0, 
+    242,   0,  16,   0,   2,   0, 
       0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,   4,   0,   0,   0, 
-      6, 112,  16,   0,   1,   0, 
-      0,   0, 167,   0,   0, 139, 
-      2, 195,   0, 128, 131, 153, 
-     25,   0,  66,   0,  16,   0, 
-      4,   0,   0,   0,  58,   0, 
-     16,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0,   8,   0, 
-      0,   0,   6, 112,  16,   0, 
-      1,   0,   0,   0,  54,   0, 
-      0,   6, 114,   0,  16,   0, 
-      4,   0,   0,   0,  70,   2, 
-     16, 128,  65,   0,   0,   0, 
-      4,   0,   0,   0,  16,   0, 
-      0,   7, 130,   0,  16,   0, 
-      2,   0,   0,   0,  70,  18, 
-     16,   0,   3,   0,   0,   0, 
-     70,   2,  16,   0,   4,   0, 
-      0,   0,  56,   0,   0,   7, 
-    114,   0,  16,   0,   3,   0, 
-      0,   0, 246,  15,  16,   0, 
-      2,   0,   0,   0,  70,   2, 
+      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,   1,   0, 
+      0,   0,  10,   0,  16,   0, 
+      2,   0,   0,   0,  16,   0, 
+      0,   8,  18,   0,  16,   0, 
+      1,   0,   0,   0,  70,  18, 
      16,   0,   3,   0,   0,   0, 
-      0,   0,   0,   7, 114,   0, 
-     16,   0,   2,   0,   0,   0, 
-     70,   2,  16,   0,   2,   0, 
+     70,   2,  16, 128,  65,   0, 
+      0,   0,   1,   0,   0,   0, 
+     50,   0,   0,   9, 114,   0, 
+     16,   0,   0,   0,   0,   0, 
+    150,   7,  16,   0,   2,   0, 
+      0,   0,   6,   0,  16,   0, 
+      1,   0,   0,   0,  70,   2, 
+     16,   0,   0,   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,   0,   0,   0,   9, 
+    114,   0,  16,   0,   1,   0, 
+      0,   0,  70,  18,  16, 128, 
+     65,   0,   0,   0,   0,   0, 
+      0,   0,  70, 130,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   7, 
+    130,   0,  16,   0,   0,   0, 
       0,   0,  70,   2,  16,   0, 
-      3,   0,   0,   0,  30,   0, 
-      0,   7, 130,   0,  16,   0, 
-      1,   0,   0,   0,  58,   0, 
+      1,   0,   0,   0,  70,   2, 
      16,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0,   1,   0, 
-      0,   0,  22,   0,   0,   1, 
-     54,   0,   0,   5,  18,   0, 
+     68,   0,   0,   5, 130,   0, 
      16,   0,   0,   0,   0,   0, 
-      1,  64,   0,   0,   0,   0, 
-      0,   0,  54,   0,   0,   5, 
-    226,   0,  16,   0,   0,   0, 
-      0,   0,   6,   9,  16,   0, 
-      2,   0,   0,   0,  54,   0, 
-      0,   5, 114,   0,  16,   0, 
-      3,   0,   0,   0,  70,   2, 
-     16,   0,   1,   0,   0,   0, 
-     54,   0,   0,   5, 130,   0, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,  56,   0,   0,   7, 
+    114,   0,  16,   0,   1,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
      16,   0,   1,   0,   0,   0, 
-     10,   0,  16,   0,   0,   0, 
-      0,   0,  48,   0,   0,   1, 
-     34,   0,   0,   8, 130,   0, 
-     16,   0,   2,   0,   0,   0, 
-     58,   0,  16,   0,   1,   0, 
-      0,   0,  26, 128,  32,   0, 
-      2,   0,   0,   0,   0,   0, 
-      0,   0,   3,   0,   0,   3, 
-     58,   0,  16,   0,   2,   0, 
-      0,   0, 167,   0,   0, 139, 
-      2, 227,   0, 128, 131, 153, 
-     25,   0,  18,   0,  16,   0, 
-      4,   0,   0,   0,  58,   0, 
-     16,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0,   0,   0, 
-      0,   0,   6, 112,  16,   0, 
-      2,   0,   0,   0, 167,   0, 
-      0, 139,   2, 227,   0, 128, 
-    131, 153,  25,   0,  34,   0, 
-     16,   0,   4,   0,   0,   0, 
-     58,   0,  16,   0,   1,   0, 
-      0,   0,   1,  64,   0,   0, 
-      4,   0,   0,   0,   6, 112, 
+     54,   0,   0,   5, 114,   0, 
      16,   0,   2,   0,   0,   0, 
+     70,   2,  16,   0,   0,   0, 
+      0,   0,  54,   0,   0,   8, 
+    114,   0,  16,   0,   3,   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, 
+     26, 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, 227, 
       0, 128, 131, 153,  25,   0, 
-     66,   0,  16,   0,   4,   0, 
-      0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,   8,   0,   0,   0, 
-      6, 112,  16,   0,   2,   0, 
-      0,   0,  54,   0,   0,   6, 
-    114,   0,  16,   0,   5,   0, 
-      0,   0,  70,  18,  16, 128, 
-     65,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   7, 
     114,   0,  16,   0,   4,   0, 
-      0,   0,  70,   2,  16,   0, 
-      4,   0,   0,   0,  70,   2, 
-     16,   0,   5,   0,   0,   0, 
-    167,   0,   0, 139,   2, 227, 
-      0, 128, 131, 153,  25,   0, 
-    130,   0,  16,   0,   2,   0, 
       0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,  24,   0,   0,   0, 
-      6, 112,  16,   0,   2,   0, 
-      0,   0,  16,   0,   0,   7, 
-    130,   0,  16,   0,   3,   0, 
+      0,   0,   0,   0,   1,  64, 
+      0,   0,   0,   0,   0,   0, 
+     70, 114,  16,   0,   2,   0, 
+      0,   0,   0,   0,   0,   8, 
+    114,   0,  16,   0,   4,   0, 
       0,   0,  70,   2,  16,   0, 
-      4,   0,   0,   0,  70,   2, 
+      4,   0,   0,   0,  70,  18, 
+     16, 128,  65,   0,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   7, 130,   0,  16,   0, 
+      1,   0,   0,   0,  70,   2, 
      16,   0,   4,   0,   0,   0, 
-     75,   0,   0,   5, 130,   0, 
-     16,   0,   3,   0,   0,   0, 
-     58,   0,  16,   0,   3,   0, 
-      0,   0,  14,   0,   0,   7, 
+     70,   2,  16,   0,   4,   0, 
+      0,   0,  68,   0,   0,   5, 
     130,   0,  16,   0,   2,   0, 
       0,   0,  58,   0,  16,   0, 
-      2,   0,   0,   0,  58,   0, 
-     16,   0,   3,   0,   0,   0, 
-     16,   0,   0,   7, 130,   0, 
-     16,   0,   3,   0,   0,   0, 
+      1,   0,   0,   0,  56,   0, 
+      0,   7, 114,   0,  16,   0, 
+      5,   0,   0,   0, 246,  15, 
+     16,   0,   2,   0,   0,   0, 
      70,   2,  16,   0,   4,   0, 
-      0,   0,  70,   2,  16,   0, 
-      4,   0,   0,   0,  68,   0, 
-      0,   5, 130,   0,  16,   0, 
-      3,   0,   0,   0,  58,   0, 
-     16,   0,   3,   0,   0,   0, 
-     56,   0,   0,   7, 114,   0, 
+      0,   0,  16,   0,   0,   7, 
+    130,   0,  16,   0,   2,   0, 
+      0,   0,  70,  18,  16,   0, 
+      3,   0,   0,   0,  70,   2, 
      16,   0,   5,   0,   0,   0, 
-    246,  15,  16,   0,   3,   0, 
-      0,   0,  70,   2,  16,   0, 
-      4,   0,   0,   0,  16,   0, 
-      0,   7, 130,   0,  16,   0, 
-      3,   0,   0,   0,  70,  18, 
+     49,   0,   0,   7, 130,   0, 
      16,   0,   3,   0,   0,   0, 
-     70,   2,  16,   0,   5,   0, 
-      0,   0,  43,   0,   0,   5, 
-    130,   0,  16,   0,   4,   0, 
-      0,   0,   1,  64,   0,   0, 
-      0,   0,   0,   0,  49,   0, 
-      0,   7, 130,   0,  16,   0, 
-      4,   0,   0,   0,  58,   0, 
-     16,   0,   4,   0,   0,   0, 
-     58,   0,  16,   0,   3,   0, 
-      0,   0,  31,   0,   4,   3, 
-     58,   0,  16,   0,   4,   0, 
-      0,   0, 167,   0,   0, 139, 
-      2, 227,   0, 128, 131, 153, 
-     25,   0,  18,   0,  16,   0, 
-      5,   0,   0,   0,  58,   0, 
-     16,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0,  12,   0, 
-      0,   0,   6, 112,  16,   0, 
-      2,   0,   0,   0, 167,   0, 
+      1,  64,   0,   0,   0,   0, 
+      0,   0,  58,   0,  16,   0, 
+      2,   0,   0,   0,  31,   0, 
+      4,   3,  58,   0,  16,   0, 
+      3,   0,   0,   0, 167,   0, 
       0, 139,   2, 227,   0, 128, 
-    131, 153,  25,   0,  34,   0, 
+    131, 153,  25,   0, 242,   0, 
      16,   0,   5,   0,   0,   0, 
-     58,   0,  16,   0,   1,   0, 
+     58,   0,  16,   0,   0,   0, 
       0,   0,   1,  64,   0,   0, 
-     16,   0,   0,   0,   6, 112, 
+     12,   0,   0,   0,  70, 126, 
      16,   0,   2,   0,   0,   0, 
-    167,   0,   0, 139,   2, 227, 
-      0, 128, 131, 153,  25,   0, 
-     66,   0,  16,   0,   5,   0, 
+     75,   0,   0,   5, 130,   0, 
+     16,   0,   1,   0,   0,   0, 
+     58,   0,  16,   0,   1,   0, 
+      0,   0,  14,   0,   0,   7, 
+    130,   0,  16,   0,   1,   0, 
       0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,  20,   0,   0,   0, 
-      6, 112,  16,   0,   2,   0, 
-      0,   0,  56,   0,   0,   7, 
-    114,   0,  16,   0,   5,   0, 
-      0,   0, 246,  15,  16,   0, 
-      3,   0,   0,   0,  70,   2, 
-     16,   0,   5,   0,   0,   0, 
+      5,   0,   0,   0,  58,   0, 
+     16,   0,   1,   0,   0,   0, 
      56,   0,   0,   7, 114,   0, 
-     16,   0,   5,   0,   0,   0, 
+     16,   0,   6,   0,   0,   0, 
     246,  15,  16,   0,   2,   0, 
       0,   0,  70,   2,  16,   0, 
-      5,   0,   0,   0,   0,   0, 
-      0,   7, 226,   0,  16,   0, 
-      0,   0,   0,   0,  86,  14, 
-     16,   0,   0,   0,   0,   0, 
-      6,   9,  16,   0,   5,   0, 
-      0,   0,  54,   0,   0,   6, 
-    114,   0,  16,   0,   4,   0, 
+      5,   0,   0,   0,  50,   0, 
+      0,   9, 114,   0,  16,   0, 
+      2,   0,   0,   0,  70,   2, 
+     16,   0,   6,   0,   0,   0, 
+    246,  15,  16,   0,   1,   0, 
+      0,   0,  70,   2,  16,   0, 
+      2,   0,   0,   0,  16,   0, 
+      0,   9, 130,   0,  16,   0, 
+      2,   0,   0,   0,  70,   2, 
+     16, 128,  65,   0,   0,   0, 
+      4,   0,   0,   0,  70,   2, 
+     16, 128,  65,   0,   0,   0, 
+      4,   0,   0,   0,  68,   0, 
+      0,   5, 130,   0,  16,   0, 
+      2,   0,   0,   0,  58,   0, 
+     16,   0,   2,   0,   0,   0, 
+     56,   0,   0,   8, 114,   0, 
+     16,   0,   4,   0,   0,   0, 
+    246,  15,  16,   0,   2,   0, 
       0,   0,  70,   2,  16, 128, 
      65,   0,   0,   0,   4,   0, 
       0,   0,  16,   0,   0,   7, 
-    130,   0,  16,   0,   3,   0, 
+    130,   0,  16,   0,   2,   0, 
+      0,   0,  70,   2,  16,   0, 
+      4,   0,   0,   0,  70,  18, 
+     16,   0,   3,   0,   0,   0, 
+      0,   0,   0,   7, 130,   0, 
+     16,   0,   2,   0,   0,   0, 
+     58,   0,  16,   0,   2,   0, 
+      0,   0,  58,   0,  16,   0, 
+      2,   0,   0,   0,  50,   0, 
+      0,  10, 114,   0,  16,   0, 
+      4,   0,   0,   0,  70,  18, 
+     16,   0,   3,   0,   0,   0, 
+    246,  15,  16, 128,  65,   0, 
+      0,   0,   2,   0,   0,   0, 
+     70,   2,  16,   0,   4,   0, 
+      0,   0,  16,   0,   0,   7, 
+    130,   0,  16,   0,   2,   0, 
       0,   0,  70,   2,  16,   0, 
       4,   0,   0,   0,  70,   2, 
      16,   0,   4,   0,   0,   0, 
      68,   0,   0,   5, 130,   0, 
-     16,   0,   3,   0,   0,   0, 
-     58,   0,  16,   0,   3,   0, 
+     16,   0,   2,   0,   0,   0, 
+     58,   0,  16,   0,   2,   0, 
       0,   0,  56,   0,   0,   7, 
     114,   0,  16,   0,   4,   0, 
       0,   0, 246,  15,  16,   0, 
-      3,   0,   0,   0,  70,   2, 
+      2,   0,   0,   0,  70,   2, 
      16,   0,   4,   0,   0,   0, 
      16,   0,   0,   7, 130,   0, 
-     16,   0,   3,   0,   0,   0, 
+     16,   0,   2,   0,   0,   0, 
      70,   2,  16,   0,   4,   0, 
-      0,   0,  70,  18,  16,   0, 
-      3,   0,   0,   0,   0,   0, 
+      0,   0,  70,   2,  16,   0, 
+      1,   0,   0,   0,  49,   0, 
       0,   7, 130,   0,  16,   0, 
-      3,   0,   0,   0,  58,   0, 
-     16,   0,   3,   0,   0,   0, 
-     58,   0,  16,   0,   3,   0, 
-      0,   0,  54,   0,   0,   6, 
-    130,   0,  16,   0,   3,   0, 
-      0,   0,  58,   0,  16, 128, 
-     65,   0,   0,   0,   3,   0, 
+      3,   0,   0,   0,   1,  64, 
+      0,   0,   0,   0,   0,   0, 
+     58,   0,  16,   0,   2,   0, 
       0,   0,  56,   0,   0,   7, 
-    114,   0,  16,   0,   5,   0, 
+    114,   0,  16,   0,   4,   0, 
       0,   0, 246,  15,  16,   0, 
-      3,   0,   0,   0,  70,  18, 
-     16,   0,   3,   0,   0,   0, 
-      0,   0,   0,   7, 114,   0, 
-     16,   0,   4,   0,   0,   0, 
-     70,   2,  16,   0,   4,   0, 
-      0,   0,  70,   2,  16,   0, 
-      5,   0,   0,   0,  16,   0, 
-      0,   7, 130,   0,  16,   0, 
-      3,   0,   0,   0,  70,   2, 
+      2,   0,   0,   0,  70,   2, 
+     16,   0,   5,   0,   0,   0, 
+     50,   0,   0,   9, 114,   0, 
      16,   0,   4,   0,   0,   0, 
      70,   2,  16,   0,   4,   0, 
-      0,   0,  68,   0,   0,   5, 
-    130,   0,  16,   0,   3,   0, 
-      0,   0,  58,   0,  16,   0, 
-      3,   0,   0,   0,  56,   0, 
-      0,   7, 114,   0,  16,   0, 
-      4,   0,   0,   0, 246,  15, 
+      0,   0, 246,  15,  16,   0, 
+      1,   0,   0,   0,  70,   2, 
      16,   0,   3,   0,   0,   0, 
-     70,   2,  16,   0,   4,   0, 
-      0,   0,  54,   0,   0,   6, 
-    114,   0,  16,   0,   5,   0, 
-      0,   0,  70,  18,  16, 128, 
-     65,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   8, 
-    114,   0,  16,   0,   5,   0, 
-      0,   0,  70,   2,  16,   0, 
-      5,   0,   0,   0,  70, 130, 
-     32,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  16,   0, 
-      0,   7, 130,   0,  16,   0, 
-      3,   0,   0,   0,  70,   2, 
-     16,   0,   5,   0,   0,   0, 
-     70,   2,  16,   0,   5,   0, 
-      0,   0,  68,   0,   0,   5, 
-    130,   0,  16,   0,   3,   0, 
-      0,   0,  58,   0,  16,   0, 
-      3,   0,   0,   0,  56,   0, 
-      0,   7, 114,   0,  16,   0, 
-      5,   0,   0,   0, 246,  15, 
+     55,   0,   0,   9, 114,   0, 
      16,   0,   3,   0,   0,   0, 
-     70,   2,  16,   0,   5,   0, 
-      0,   0,  16,   0,   0,   7, 
-    130,   0,  16,   0,   3,   0, 
+    246,  15,  16,   0,   3,   0, 
       0,   0,  70,   2,  16,   0, 
       4,   0,   0,   0,  70,   2, 
-     16,   0,   5,   0,   0,   0, 
-     43,   0,   0,   5,  18,   0, 
-     16,   0,   4,   0,   0,   0, 
-      1,  64,   0,   0,   0,   0, 
-      0,   0,  49,   0,   0,   7, 
-     18,   0,  16,   0,   4,   0, 
-      0,   0,  10,   0,  16,   0, 
-      4,   0,   0,   0,  58,   0, 
      16,   0,   3,   0,   0,   0, 
-     31,   0,   4,   3,  10,   0, 
-     16,   0,   4,   0,   0,   0, 
-    167,   0,   0, 139,   2, 227, 
-      0, 128, 131, 153,  25,   0, 
-     18,   0,  16,   0,   4,   0, 
-      0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,  12,   0,   0,   0, 
-      6, 112,  16,   0,   2,   0, 
-      0,   0, 167,   0,   0, 139, 
-      2, 227,   0, 128, 131, 153, 
-     25,   0,  34,   0,  16,   0, 
-      4,   0,   0,   0,  58,   0, 
-     16,   0,   1,   0,   0,   0, 
-      1,  64,   0,   0,  16,   0, 
-      0,   0,   6, 112,  16,   0, 
-      2,   0,   0,   0, 167,   0, 
-      0, 139,   2, 227,   0, 128, 
-    131, 153,  25,   0,  66,   0, 
-     16,   0,   4,   0,   0,   0, 
-     58,   0,  16,   0,   1,   0, 
-      0,   0,   1,  64,   0,   0, 
-     20,   0,   0,   0,   6, 112, 
-     16,   0,   2,   0,   0,   0, 
-     56,   0,   0,   7, 114,   0, 
-     16,   0,   4,   0,   0,   0, 
-    246,  15,  16,   0,   3,   0, 
-      0,   0,  70,   2,  16,   0, 
-      4,   0,   0,   0,  56,   0, 
-      0,   7, 114,   0,  16,   0, 
-      4,   0,   0,   0, 246,  15, 
-     16,   0,   2,   0,   0,   0, 
-     70,   2,  16,   0,   4,   0, 
-      0,   0,   0,   0,   0,   7, 
-    114,   0,  16,   0,   3,   0, 
-      0,   0,  70,   2,  16,   0, 
-      3,   0,   0,   0,  70,   2, 
-     16,   0,   4,   0,   0,   0, 
-     21,   0,   0,   1,  21,   0, 
-      0,   1,  30,   0,   0,   7, 
-    130,   0,  16,   0,   1,   0, 
-      0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,   1,  64, 
-      0,   0,   1,   0,   0,   0, 
-     22,   0,   0,   1,  69,   0, 
-      0, 139, 194,   0,   0, 128, 
-     67,  85,  21,   0, 242,   0, 
-     16,   0,   1,   0,   0,   0, 
-     70,  16,  16,   0,   2,   0, 
-      0,   0,  70, 126,  16,   0, 
-      0,   0,   0,   0,   0,  96, 
+     21,   0,   0,   1,  30,   0, 
+      0,   7, 130,   0,  16,   0, 
+      0,   0,   0,   0,  58,   0, 
      16,   0,   0,   0,   0,   0, 
-     56,   0,   0,   8, 114,   0, 
-     16,   0,   1,   0,   0,   0, 
-     70,   2,  16,   0,   1,   0, 
-      0,   0,   6, 128,  32,   0, 
-      1,   0,   0,   0,   0,   0, 
-      0,   0,  56,   0,   0,   8, 
-    114,   0,  16,   0,   0,   0, 
-      0,   0, 150,   7,  16,   0, 
-      0,   0,   0,   0,  86, 133, 
-     32,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   7, 114,   0,  16,   0, 
-      0,   0,   0,   0,  70,   2, 
+      1,  64,   0,   0,   1,   0, 
+      0,   0,  22,   0,   0,   1, 
+     69,   0,   0, 139, 194,   0, 
+      0, 128,  67,  85,  21,   0, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  16,  16,   0, 
+      2,   0,   0,   0,  70, 126, 
      16,   0,   0,   0,   0,   0, 
-     70,   2,  16,   0,   1,   0, 
+      0,  96,  16,   0,   0,   0, 
       0,   0,  56,   0,   0,   8, 
     114,   0,  16,   0,   1,   0, 
       0,   0,  70,   2,  16,   0, 
-      3,   0,   0,   0, 166, 138, 
+      2,   0,   0,   0,  86, 133, 
      32,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   7, 114,   0,  16,   0, 
+      0,   0,   0,   0,  50,   0, 
+      0,  10, 114,   0,  16,   0, 
       0,   0,   0,   0,  70,   2, 
      16,   0,   0,   0,   0,   0, 
+      6, 128,  32,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
      70,   2,  16,   0,   1,   0, 
-      0,   0,  52,   0,   0,  10, 
-    114,   0,  16,   0,   0,   0, 
+      0,   0,  50,  32,   0,  10, 
+    114,  32,  16,   0,   0,   0, 
       0,   0,  70,   2,  16,   0, 
-      0,   0,   0,   0,   2,  64, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     51,   0,   0,  10, 114,   0, 
+      3,   0,   0,   0, 166, 138, 
+     32,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,  70,   2, 
      16,   0,   0,   0,   0,   0, 
-     70,   2,  16,   0,   0,   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, 
-      1,   0,   0,   0,  58,   0, 
-     16,   0,   1,   0,   0,   0, 
-     54,   0,   0,   5, 114,  32, 
+     54,   0,   0,   5, 130,  32, 
      16,   0,   0,   0,   0,   0, 
-     70,   2,  16,   0,   0,   0, 
-      0,   0,  54,   0,   0,   5, 
-    130,  32,  16,   0,   0,   0, 
-      0,   0,  58,   0,  16,   0, 
-      1,   0,   0,   0,  62,   0, 
-      0,   1,  83,  84,  65,  84, 
-    148,   0,   0,   0, 103,   0, 
-      0,   0,   6,   0,   0,   0, 
-      0,   0,   0,   0,   4,   0, 
-      0,   0,  49,   0,   0,   0, 
-      5,   0,   0,   0,   0,   0, 
-      0,   0,   2,   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, 
-      1,   0,   0,   0,  19,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,  10,   0,   0,   0, 
-      0,   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,  83,  80,  68,  66, 
-      0,  86,   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,  43,   0,   0,   0, 
-    212,   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, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,  62,   0,   0,   1, 
+     83,  84,  65,  84, 148,   0, 
+      0,   0,  65,   0,   0,   0, 
+      7,   0,   0,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+     34,   0,   0,   0,   5,   0, 
       0,   0,   0,   0,   0,   0, 
+      2,   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,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      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, 248, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 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,   0,   0,   1,   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, 
-      4, 215,  82,  92,   1,   0, 
-      0,   0, 175, 136, 106, 248, 
-     57, 129,   4,  70, 150,  75, 
-     21,  29, 141,  80, 154,  11, 
-      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,  84, 101, 
-    120, 116, 117, 114, 101,  50, 
-     68,  32, 115, 104,  97, 100, 
-    101, 114,  84, 101, 120, 116, 
-    117, 114, 101,  32,  58,  32, 
-    114, 101, 103, 105, 115, 116, 
-    101, 114,  40,  32, 116,  48, 
-     32,  41,  59,  13,  10,  83, 
-     97, 109, 112, 108, 101, 114, 
-     83, 116,  97, 116, 101,  32, 
-     83,  97, 109, 112, 108, 101, 
-     84, 121, 112, 101,  59,  13, 
-     10,  13,  10,  47,  47,  32, 
-     84, 104, 101,  32, 112, 111, 
-    115, 105, 116, 105, 111, 110, 
-     32, 111, 102,  32, 116, 104, 
-    101,  32, 107,  97, 109, 101, 
-    114,  97,  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, 
-     32,  98,  48,  32,  41,  13, 
-     10, 123,  13,  10,  32,  32, 
-     32,  32, 102, 108, 111,  97, 
-    116,  52,  32, 107,  80, 111, 
-    115, 105, 116, 105, 111, 110, 
-     59,  13,  10, 125,  13,  10, 
-     13,  10,  47,  47,  32, 116, 
-    104, 101, 115, 101,  32, 118, 
-     97, 108, 117, 101, 115,  32, 
-    115, 104, 111, 117, 108, 100, 
-     32, 115, 117, 109,  32, 117, 
-    112,  32, 116, 111,  32,  49, 
-     13,  10,  99,  98, 117, 102, 
-    102, 101, 114,  32,  77,  97, 
-    116, 101, 114, 105,  97, 108, 
-     32,  58,  32, 114, 101, 103, 
-    105, 115, 116, 101, 114,  40, 
-     32,  98,  49,  32,  41,  13, 
-     10, 123,  13,  10,  32,  32, 
-     32,  32, 102, 108, 111,  97, 
-    116,  32,  97, 109,  98, 105, 
-    101, 110, 116,  70,  97,  99, 
-    116, 111, 114,  59,  13,  10, 
-     32,  32,  32,  32, 102, 108, 
-    111,  97, 116,  32, 100, 105, 
-    102, 102, 117, 115,  70,  97, 
-     99, 116, 111, 114,  59,  13, 
-     10,  32,  32,  32,  32, 102, 
-    108, 111,  97, 116,  32, 115, 
-    112, 101,  99, 117, 108,  97, 
-    114,  70,  97,  99, 116, 111, 
-    114,  59,  13,  10, 125,  59, 
-     13,  10,  13,  10,  99,  98, 
-    117, 102, 102, 101, 114,  32, 
-     76, 105, 103, 104, 116,  67, 
-    111, 117, 110, 116,  32,  58, 
-     32, 114, 101, 103, 105, 115, 
-    116, 101, 114,  40,  32,  98, 
-     50,  32,  41,  13,  10, 123, 
-     13,  10,  32,  32,  32,  32, 
-    105, 110, 116,  32, 100, 105, 
-    102, 102, 117, 115, 101,  76, 
-    105, 103, 104, 116,  67, 111, 
-    117, 110, 116,  59,  13,  10, 
-     32,  32,  32,  32, 105, 110, 
-    116,  32, 112, 111, 105, 110, 
-    116,  76, 105, 103, 104, 116, 
-     67, 111, 117, 110, 116,  59, 
-     13,  10, 125,  13,  10,  13, 
-     10,  47,  47,  32, 108, 105, 
-    103, 104, 116, 115,  13,  10, 
-    115, 116, 114, 117,  99, 116, 
-     32,  68, 105, 102, 102, 117, 
-    115, 101,  76, 105, 103, 104, 
-    116,  13,  10, 123,  13,  10, 
-     32,  32,  32,  32, 102, 108, 
-    111,  97, 116,  51,  32, 100, 
-    105, 114, 101,  99, 116, 105, 
-    111, 110,  59,  13,  10,  32, 
-     32,  32,  32, 102, 108, 111, 
-     97, 116,  51,  32,  99, 111, 
-    108, 111, 114,  59,  13,  10, 
-    125,  59,  13,  10,  13,  10, 
-    115, 116, 114, 117,  99, 116, 
-    198,  90,   0,   0, 117, 131, 
-      1,   0,  76, 232,   3,   0, 
-    242,  56,   1,   0,  43, 236, 
-      3,   0,  28,  19,   2,   0, 
-     65,  36,   1,   0, 236, 179, 
-      1,   0,  97, 167,   3,   0, 
-    125,  10,   2,   0, 125, 181, 
-      2,   0, 200,  81,   2,   0, 
-    193,  33,   3,   0,  65, 185, 
-      2,   0,   9, 241,   2,   0, 
-    146, 230,   3,   0, 125, 218, 
-      1,   0, 118,  19,   1,   0, 
-    202, 179,   0,   0, 201, 241, 
-      2,   0,  12, 238,   0,   0, 
-    115,  74,   1,   0, 117,  14, 
-      0,   0,  80, 185,   1,   0, 
-    110,  77,   0,   0, 144, 132, 
-      1,   0, 232,  35,   2,   0, 
-     16, 206,   3,   0, 226, 163, 
-      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,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   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,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  13,  10, 
-     47,  47,  32,  71,  76,  79, 
-     66,  65,  76,  83,  32,  47, 
-     47,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  13,  10,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     13,  10,  84, 101, 120, 116, 
-    117, 114, 101,  50,  68,  32, 
-    115, 104,  97, 100, 101, 114, 
-     84, 101, 120, 116, 117, 114, 
-    101,  32,  58,  32, 114, 101, 
-    103, 105, 115, 116, 101, 114, 
-     40,  32, 116,  48,  32,  41, 
-     59,  13,  10,  83,  97, 109, 
-    112, 108, 101, 114,  83, 116, 
-     97, 116, 101,  32,  83,  97, 
-    109, 112, 108, 101,  84, 121, 
-    112, 101,  59,  13,  10,  13, 
-     10,  47,  47,  32,  84, 104, 
-    101,  32, 112, 111, 115, 105, 
-    116, 105, 111, 110,  32, 111, 
-    102,  32, 116, 104, 101,  32, 
-    107,  97, 109, 101, 114,  97, 
-     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,  32,  98, 
-     48,  32,  41,  13,  10, 123, 
-     13,  10,  32,  32,  32,  32, 
-    102, 108, 111,  97, 116,  52, 
-     32, 107,  80, 111, 115, 105, 
-    116, 105, 111, 110,  59,  13, 
-     10, 125,  13,  10,  13,  10, 
-     47,  47,  32, 116, 104, 101, 
-    115, 101,  32, 118,  97, 108, 
-    117, 101, 115,  32, 115, 104, 
-    111, 117, 108, 100,  32, 115, 
-    117, 109,  32, 117, 112,  32, 
-    116, 111,  32,  49,  13,  10, 
-     99,  98, 117, 102, 102, 101, 
-    114,  32,  77,  97, 116, 101, 
-    114, 105,  97, 108,  32,  58, 
-     32, 114, 101, 103, 105, 115, 
-    116, 101, 114,  40,  32,  98, 
-     49,  32,  41,  13,  10, 123, 
-     13,  10,  32,  32,  32,  32, 
-    102, 108, 111,  97, 116,  32, 
-     97, 109,  98, 105, 101, 110, 
-    116,  70,  97,  99, 116, 111, 
-    114,  59,  13,  10,  32,  32, 
-     32,  32, 102, 108, 111,  97, 
-    116,  32, 100, 105, 102, 102, 
-    117, 115,  70,  97,  99, 116, 
-    111, 114,  59,  13,  10,  32, 
-     32,  32,  32, 102, 108, 111, 
-     97, 116,  32, 115, 112, 101, 
-     99, 117, 108,  97, 114,  70, 
-     97,  99, 116, 111, 114,  59, 
-     13,  10, 125,  59,  13,  10, 
-     13,  10,  99,  98, 117, 102, 
-    102, 101, 114,  32,  76, 105, 
-    103, 104, 116,  67, 111, 117, 
-    110, 116,  32,  58,  32, 114, 
-    101, 103, 105, 115, 116, 101, 
-    114,  40,  32,  98,  50,  32, 
-     41,  13,  10, 123,  13,  10, 
-     32,  32,  32,  32, 105, 110, 
-    116,  32, 100, 105, 102, 102, 
-    117, 115, 101,  76, 105, 103, 
-    104, 116,  67, 111, 117, 110, 
-    116,  59,  13,  10,  32,  32, 
-     32,  32, 105, 110, 116,  32, 
-    112, 111, 105, 110, 116,  76, 
-    105, 103, 104, 116,  67, 111, 
-    117, 110, 116,  59,  13,  10, 
-    125,  13,  10,  13,  10,  47, 
-     47,  32, 108, 105, 103, 104, 
-    116, 115,  13,  10, 115, 116, 
-    114, 117,  99, 116,  32,  68, 
-    105, 102, 102, 117, 115, 101, 
-     76, 105, 103, 104, 116,  13, 
-     10, 123,  13,  10,  32,  32, 
-     32,  32, 102, 108, 111,  97, 
-    116,  51,  32, 100, 105, 114, 
-    101,  99, 116, 105, 111, 110, 
-     59,  13,  10,  32,  32,  32, 
-     32, 102, 108, 111,  97, 116, 
-     51,  32,  99, 111, 108, 111, 
-    114,  59,  13,  10, 125,  59, 
-     13,  10,  13,  10, 115, 116, 
-    114, 117,  99, 116,  32,  80, 
-    111, 105, 110, 116,  76, 105, 
-    103, 104, 116,  13,  10, 123, 
-     13,  10,  32,  32,  32,  32, 
-    102, 108, 111,  97, 116,  51, 
-     32, 112, 111, 115, 105, 116, 
-    105, 111, 110,  59,  13,  10, 
-     32,  32,  32,  32, 102, 108, 
-    111,  97, 116,  51,  32,  99, 
-    111, 108, 111, 114,  59,  13, 
-     10,  32,  32,  32,  32, 102, 
-    108, 111,  97, 116,  32, 114, 
-     97, 100, 105, 117, 115,  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,  32,  68, 105, 102, 102, 
-    117, 115, 101,  76, 105, 103, 
-    104, 116,  32,  62,  32, 100, 
-    105, 102, 117, 115, 101,  76, 
-    105, 103, 104, 116, 115,  32, 
-     58,  32, 114, 101, 103, 105, 
-    115, 116, 101, 114,  40,  32, 
-    116,  49,  32,  41,  59,  13, 
-     10,  83, 116, 114, 117,  99, 
-    116, 117, 114, 101, 100,  66, 
-    117, 102, 102, 101, 114,  60, 
-     32,  80, 111, 105, 110, 116, 
-     76, 105, 103, 104, 116,  32, 
-     62,  32, 112, 111, 105, 110, 
-    116,  76, 105, 103, 104, 116, 
-    115,  32,  58,  32, 114, 101, 
-    103, 105, 115, 116, 101, 114, 
-     40,  32, 116,  50,  32,  41, 
-     59,  13,  10,  13,  10,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  13,  10,  47,  47,  32, 
-     84,  89,  80,  69,  68,  69, 
-     70,  83,  32,  47,  47,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  13, 
-     10,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  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, 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,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  13,  10,  47,  47,  32, 
-     80, 105, 120, 101, 108,  32, 
-     83, 104,  97, 100, 101, 114, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  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,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  13,  10, 102, 
-    108, 111,  97, 116,  52,  32, 
-     84, 101, 120, 116, 117, 114, 
-    101,  80, 105, 120, 101, 108, 
-     83, 104,  97, 100, 101, 114, 
-     40,  32,  80, 105, 120, 101, 
-    108,  73, 110, 112, 117, 116, 
-     84, 121, 112, 101,  32, 105, 
-    110, 112, 117, 116,  32,  41, 
-     32,  58,  32,  83,  86,  95, 
-     84,  65,  82,  71,  69,  84, 
-     13,  10, 123,  13,  10,  32, 
-     32,  32,  32, 102, 108, 111, 
-     97, 116,  51,  32, 100, 105, 
-    102, 102, 117, 115, 101,  76, 
-    105, 103, 104, 116,  32,  61, 
-     32, 102, 108, 111,  97, 116, 
-     51,  40,  32,  48,  44,  32, 
-     48,  44,  32,  48,  32,  41, 
-     59,  13,  10,  32,  32,  32, 
-     32, 102, 108, 111,  97, 116, 
-     51,  32, 115, 112, 101,  99, 
-    117, 108,  97, 114,  76, 105, 
-    103, 104, 116,  32,  61,  32, 
-    102, 108, 111,  97, 116,  51, 
-     40,  32,  48,  44,  32,  48, 
-     44,  32,  48,  32,  41,  59, 
-     13,  10,  32,  32,  32,  32, 
-    102, 111, 114,  40,  32, 105, 
-    110, 116,  32, 106,  32,  61, 
-     32,  48,  59,  32, 106,  32, 
-     60,  32, 100, 105, 102, 102, 
-    117, 115, 101,  76, 105, 103, 
-    104, 116,  67, 111, 117, 110, 
-    116,  59,  32, 106,  43,  43, 
-     32,  41,  13,  10,  32,  32, 
-     32,  32, 123,  13,  10,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32, 105, 102,  40,  32, 100, 
-    111, 116,  40,  32, 105, 110, 
-    112, 117, 116,  46, 110, 111, 
-    114, 109,  97, 108,  44,  32, 
-     45, 100, 105, 102, 117, 115, 
-    101,  76, 105, 103, 104, 116, 
-    115,  91,  32, 106,  32,  93, 
-     46, 100, 105, 114, 101,  99, 
-    116, 105, 111, 110,  32,  41, 
-     32,  60,  32,  48,  32,  41, 
-     13,  10,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  99, 111, 110, 116, 
-    105, 110, 117, 101,  59,  13, 
-     10,  32,  32,  32,  32,  32, 
-     32,  32,  32, 100, 105, 102, 
-    102, 117, 115, 101,  76, 105, 
-    103, 104, 116,  32,  43,  61, 
-     32, 100, 105, 102, 117, 115, 
-    101,  76, 105, 103, 104, 116, 
-    115,  91,  32, 106,  32,  93, 
-     46,  99, 111, 108, 111, 114, 
-     32,  42,  32, 100, 111, 116, 
-     40,  32, 105, 110, 112, 117, 
-    116,  46, 110, 111, 114, 109, 
-     97, 108,  44,  32,  45, 100, 
-    105, 102, 117, 115, 101,  76, 
-    105, 103, 104, 116, 115,  91, 
-     32, 106,  32,  93,  46, 100, 
-    105, 114, 101,  99, 116, 105, 
-    111, 110,  32,  41,  59,  13, 
-     10,  32,  32,  32,  32, 125, 
-     13,  10,  32,  32,  32,  32, 
-    102, 111, 114,  40,  32, 105, 
-    110, 116,  32, 105,  32,  61, 
-     32,  48,  59,  32, 105,  32, 
-     60,  32, 112, 111, 105, 110, 
-    116,  76, 105, 103, 104, 116, 
-     67, 111, 117, 110, 116,  59, 
-     32, 105,  43,  43,  32,  41, 
-     13,  10,  32,  32,  32,  32, 
-    123,  13,  10,  32,  32,  32, 
-     32,  32,  32,  32,  32, 102, 
-    108, 111,  97, 116,  51,  32, 
-    108, 105, 103, 104, 116,  68, 
-    105, 114,  32,  61,  32, 112, 
-    111, 105, 110, 116,  76, 105, 
-    103, 104, 116, 115,  91,  32, 
-    105,  32,  93,  46, 112, 111, 
-    115, 105, 116, 105, 111, 110, 
-     32,  45,  32, 105, 110, 112, 
-    117, 116,  46, 119, 111, 114, 
-    108, 100,  80, 111, 115,  46, 
-    120, 121, 122,  59,  13,  10, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32, 102, 108, 111,  97, 
-    116,  32, 102,  97,  99, 116, 
-    111, 114,  32,  61,  32, 112, 
-    111, 105, 110, 116,  76, 105, 
-    103, 104, 116, 115,  91,  32, 
-    105,  32,  93,  46, 114,  97, 
-    100, 105, 117, 115,  32,  47, 
-     32, 108, 101, 110, 103, 116, 
-    104,  40,  32, 108, 105, 103, 
-    104, 116,  68, 105, 114,  32, 
-     41,  59,  13,  10,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-    102, 108, 111,  97, 116,  32, 
-    102,  32,  61,  32, 100, 111, 
-    116,  40,  32, 105, 110, 112, 
-    117, 116,  46, 110, 111, 114, 
-    109,  97, 108,  44,  32, 110, 
-    111, 114, 109,  97, 108, 105, 
-    122, 101,  40,  32, 108, 105, 
-    103, 104, 116,  68, 105, 114, 
-     32,  41,  32,  41,  59,  13, 
-     10,  32,  32,  32,  32,  32, 
-     32,  32,  32, 105, 102,  40, 
-     32, 102,  32,  62,  32,  48, 
-     32,  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, 105, 102, 
-    102, 117, 115, 101,  76, 105, 
-    103, 104, 116,  32,  43,  61, 
-     32, 112, 111, 105, 110, 116, 
-     76, 105, 103, 104, 116, 115, 
-     91,  32, 105,  32,  93,  46, 
-     99, 111, 108, 111, 114,  32, 
-     42,  32, 102,  32,  42,  32, 
-    102,  97,  99, 116, 111, 114, 
-     59,  13,  10,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32, 102,  32,  61, 
-     32, 100, 111, 116,  40,  32, 
-    110, 111, 114, 109,  97, 108, 
-    105, 122, 101,  40,  32, 114, 
-    101, 102, 108, 101,  99, 116, 
-     40,  32, 110, 111, 114, 109, 
-     97, 108, 105, 122, 101,  40, 
-     32,  45, 108, 105, 103, 104, 
-    116,  68, 105, 114,  32,  41, 
-     44,  32, 105, 110, 112, 117, 
-    116,  46, 110, 111, 114, 109, 
-     97, 108,  32,  41,  32,  41, 
-     44,  32, 110, 111, 114, 109, 
-     97, 108, 105, 122, 101,  40, 
-     32, 107,  80, 111, 115, 105, 
-    116, 105, 111, 110,  46, 120, 
-    121, 122,  32,  45,  32, 105, 
-    110, 112, 117, 116,  46, 119, 
-    111, 114, 108, 100,  80, 111, 
-    115,  46, 120, 121, 122,  32, 
-     41,  32,  41,  59,  13,  10, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-    105, 102,  40,  32, 102,  32, 
-     62,  32,  48,  32,  41,  13, 
-     10,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32, 115, 
-    112, 101,  99, 117, 108,  97, 
-    114,  76, 105, 103, 104, 116, 
-     32,  43,  61,  32, 112, 111, 
-    105, 110, 116,  76, 105, 103, 
-    104, 116, 115,  91,  32, 105, 
-     32,  93,  46,  99, 111, 108, 
-    111, 114,  32,  42,  32, 102, 
-     32,  42,  32, 102,  97,  99, 
-    116, 111, 114,  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, 102, 108, 
-    111,  97, 116,  52,  32, 109, 
-     97, 116, 101, 114, 105,  97, 
-    108,  67, 111, 108, 111, 114, 
-     32,  61,  32, 115, 104,  97, 
-    100, 101, 114,  84, 101, 120, 
-    116, 117, 114, 101,  46,  83, 
-     97, 109, 112, 108, 101,  40, 
-     32,  83,  97, 109, 112, 108, 
-    101,  84, 121, 112, 101,  44, 
-     32, 105, 110, 112, 117, 116, 
-     46, 116, 101, 120,  32,  41, 
-     59,  13,  10,  32,  32,  32, 
-     32, 102, 108, 111,  97, 116, 
-     52,  32, 116, 101, 120, 116, 
-    117, 114, 101,  67, 111, 108, 
-    111, 114,  32,  61,  32, 115, 
-     97, 116, 117, 114,  97, 116, 
-    101,  40,  32, 109,  97, 116, 
-    101, 114, 105,  97, 108,  67, 
-    111, 108, 111, 114,  32,  42, 
-     32,  97, 109,  98, 105, 101, 
-    110, 116,  70,  97,  99, 116, 
-    111, 114,  32,  43,  32, 102, 
-    108, 111,  97, 116,  52,  40, 
-     32, 100, 105, 102, 102, 117, 
-    115, 101,  76, 105, 103, 104, 
-    116,  46, 120,  44,  32, 100, 
-    105, 102, 102, 117, 115, 101, 
-     76, 105, 103, 104, 116,  46, 
-    121,  44,  32, 100, 105, 102, 
-    102, 117, 115, 101,  76, 105, 
-    103, 104, 116,  46, 122,  44, 
-     32,  48,  32,  41,  32,  42, 
-     32, 100, 105, 102, 102, 117, 
-    115,  70,  97,  99, 116, 111, 
-    114,  32,  43,  32, 102, 108, 
-    111,  97, 116,  52,  40,  32, 
-    115, 112, 101,  99, 117, 108, 
-     97, 114,  76, 105, 103, 104, 
-    116,  46, 120,  44,  32, 115, 
-    112, 101,  99, 117, 108,  97, 
-    114,  76, 105, 103, 104, 116, 
-     46, 121,  44,  32, 115, 112, 
-    101,  99, 117, 108,  97, 114, 
-     76, 105, 103, 104, 116,  46, 
-    122,  44,  32,  48,  32,  41, 
-     32,  42,  32, 115, 112, 101, 
-     99, 117, 108,  97, 114,  70, 
-     97,  99, 116, 111, 114,  32, 
-     41,  59,  13,  10,  32,  32, 
-     32,  32, 116, 101, 120, 116, 
-    117, 114, 101,  67, 111, 108, 
-    111, 114,  46,  97,  32,  61, 
-     32, 109,  97, 116, 101, 114, 
-    105,  97, 108,  67, 111, 108, 
-    111, 114,  46,  97,  59,  13, 
-     10,  32,  32,  32,  32, 114, 
-    101, 116, 117, 114, 110,  32, 
-    116, 101, 120, 116, 117, 114, 
-    101,  67, 111, 108, 111, 114, 
-     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,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   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, 
-     91,  13,   0,   0,   0,  67, 
-     58,  92,  85, 115, 101, 114, 
-    115,  92, 107, 111, 108, 106, 
-     97,  92,  79, 110, 101,  68, 
-    114, 105, 118, 101,  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,  65, 108, 108, 103, 
-    101, 109, 101, 105, 110,  92, 
-     70, 114,  97, 109, 101, 119, 
-    111, 114, 107,  92,  85,  73, 
-     80, 105, 120, 101, 108,  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, 111, 110, 101, 
-    100, 114, 105, 118, 101,  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,  97, 108, 108, 
-    103, 101, 109, 101, 105, 110, 
-     92, 102, 114,  97, 109, 101, 
-    119, 111, 114, 107,  92, 117, 
-    105, 112, 105, 120, 101, 108, 
-    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,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  13,  10,  47,  47, 
-     32,  71,  76,  79,  66,  65, 
-     76,  83,  32,  47,  47,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     13,  10,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  13,  10, 
-     27, 226,  48,   1, 128,   0, 
-      0,   0, 186,   7, 139,  51, 
-     85, 185, 212,   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, 
-     92,   0,   0,   0,  40,   0, 
-      0,   0,  27, 226,  48,   1, 
-     15,  68, 182,  27, 164,  12, 
-      0,   0,   1,   0,   0,   0, 
-     91,   0,   0,   0,  92,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   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,  15,   0, 171,  63, 
-     10,   0,   1,   0,  15,   0, 
-    171,  63,  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, 112, 115,  95,  53, 
-     95,  48,   0, 104, 108, 115, 
-    108,  69, 110, 116, 114, 121, 
-      0,  84, 101, 120, 116, 117, 
-    114, 101,  80, 105, 120, 101, 
-    108,  83, 104,  97, 100, 101, 
-    114,   0,   0,   0,  58,   0, 
-     16,  17,   0,   0,   0,   0, 
-    156,   7,   0,   0,   0,   0, 
-      0,   0, 236,  10,   0,   0, 
-      0,   0,   0,   0, 236,  10, 
-      0,   0,   7,  16,   0,   0, 
-    176,   0,   0,   0,   1,   0, 
-    160,  84, 101, 120, 116, 117, 
-    114, 101,  80, 105, 120, 101, 
-    108,  83, 104,  97, 100, 101, 
-    114,   0,   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, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-      0,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-      4,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-      4,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-      8,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-      8,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     12,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     12,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     16,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     16,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     20,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     20,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     24,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     24,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     28,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     28,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     32,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     32,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     36,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     36,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     40,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     48,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     44,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     52,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     48,   0,   4,   0, 176,   0, 
-      0,   0,   1,   0, 236,  10, 
-     56,   0,   0,   0,  74,   0, 
-     62,  17,   6,  16,   0,   0, 
-    136,   0,  60,  84, 101, 120, 
-    116, 117, 114, 101,  80, 105, 
-    120, 101, 108,  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,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,   0,   0, 
-      4,   0, 176,   0,   0,   0, 
-      1,   0, 236,  10,   0,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,   4,   0, 
-      4,   0, 176,   0,   0,   0, 
-      1,   0, 236,  10,   4,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,   8,   0, 
-      4,   0, 176,   0,   0,   0, 
-      1,   0, 236,  10,   8,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  12,   0, 
-      4,   0, 176,   0,   0,   0, 
-      1,   0, 236,  10,  12,   0, 
-      0,   0,  50,   0,  62,  17, 
-      2,  16,   0,   0,   8,   0, 
-    100, 105, 102, 102, 117, 115, 
-    101,  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, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   0,   0,   4,   0, 
-    208,   0,   0,   0,   1,   0, 
-     72,   0,   0,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   4,   0,   4,   0, 
-    208,   0,   0,   0,   1,   0, 
-     72,   0,   4,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   8,   0,   4,   0, 
-    208,   0,   0,   0,   1,   0, 
-     72,   0,   8,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   0,   0,   4,   0, 
-     24,   1,   0,   0,   1,   0, 
-     24,   3,  32,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   4,   0,   4,   0, 
-     24,   1,   0,   0,   1,   0, 
-     24,   3,  36,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   8,   0,   4,   0, 
-     24,   1,   0,   0,   1,   0, 
-     24,   3,  40,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   0,   0,   4,   0, 
-     48,   4,   0,   0,   1,   0, 
-    132,   6,   4,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   4,   0,   4,   0, 
-     48,   4,   0,   0,   1,   0, 
-    132,   6,   8,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   8,   0,   4,   0, 
-     48,   4,   0,   0,   1,   0, 
-    108,   7,  12,   0,   0,   0, 
-     54,   0,  62,  17,   2,  16, 
-      0,   0,   8,   0, 115, 112, 
-    101,  99, 117, 108,  97, 114, 
-     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,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   0,   0, 
-      4,   0, 240,   0,   0,   0, 
-      1,   0,  84,   3,  16,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   4,   0, 
-      4,   0, 240,   0,   0,   0, 
-      1,   0,  84,   3,  20,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   8,   0, 
-      4,   0, 240,   0,   0,   0, 
-      1,   0,  84,   3,  24,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   0,   0, 
-      4,   0,  68,   4,   0,   0, 
-      1,   0,  88,   7,  48,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   4,   0, 
-      4,   0,  68,   4,   0,   0, 
-      1,   0,  88,   7,  52,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   8,   0, 
-      4,   0,  68,   4,   0,   0, 
-      1,   0,  88,   7,  56,   0, 
-      0,   0,  42,   0,  62,  17, 
-    116,   0,   0,   0,   0,   0, 
-    106,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   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,   1,   0, 
-      0,   0,   4,   0,   4,   1, 
-      0,   0,   1,   0,  40,   0, 
-     12,   0,   0,   0,  22,   0, 
-     80,  17,   0,   0,   1,   0, 
-      0,   0,   4,   0,  44,   1, 
-      0,   0,   1,   0,  44,   3, 
-     28,   0,   0,   0,  42,   0, 
-     62,  17, 116,   0,   0,   0, 
-      0,   0, 105,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      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, 
-      1,   0,   0,   0,   4,   0, 
-     28,   4,   0,   0,   1,   0, 
-     60,   0,   0,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      1,   0,   0,   0,   4,   0, 
-     88,   4,   0,   0,   1,   0, 
-     28,   6,  28,   0,   0,   0, 
-     46,   0,  62,  17,   2,  16, 
-      0,   0,   8,   0, 108, 105, 
-    103, 104, 116,  68, 105, 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, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   0,   0,   4,   0, 
-     64,   5,   0,   0,   1,   0, 
-     12,   2,  64,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   4,   0,   4,   0, 
-     64,   5,   0,   0,   1,   0, 
-     12,   2,  68,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   8,   0,   4,   0, 
-     64,   5,   0,   0,   1,   0, 
-     12,   2,  72,   0,   0,   0, 
-     46,   0,  62,  17,  64,   0, 
-      0,   0,   0,   0, 102,  97, 
-     99, 116, 111, 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, 
-     22,   0,  80,  17,   0,   0, 
-      1,   0,   0,   0,   4,   0, 
-    184,   5,   0,   0,   1,   0, 
-    144,   4,  44,   0,   0,   0, 
-     42,   0,  62,  17,  64,   0, 
-      0,   0,   0,   0, 102,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,  26,   0,  80,  17, 
-      0,   0,   1,   0,   0,   0, 
-      4,   0,  32,   6,   0,   0, 
-      1,   0,  40,   4,  72,   1, 
-    164,   1,  60,   0,   0,   0, 
-     54,   0,  62,  17,   0,  16, 
-      0,   0,   8,   0, 109,  97, 
-    116, 101, 114, 105,  97, 108, 
-     67, 111, 108, 111, 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,  22,   0,  80,  17, 
-      0,   0,   5,   0,   0,   0, 
-      4,   0, 116,  10,   0,   0, 
-      1,   0,  32,   0,  16,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   4,   0, 
-      4,   0, 116,  10,   0,   0, 
-      1,   0,  32,   0,  20,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   8,   0, 
-      4,   0, 116,  10,   0,   0, 
-      1,   0,  32,   0,  24,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  12,   0, 
-      4,   0, 116,  10,   0,   0, 
-      1,   0,  40,   1,  28,   0, 
-      0,   0,  50,   0,  62,  17, 
-      0,  16,   0,   0,   8,   0, 
-    116, 101, 120, 116, 117, 114, 
-    101,  67, 111, 108, 111, 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, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   0,   0,   4,   0, 
-     92,  11,   0,   0,   1,   0, 
-     64,   0,   0,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   4,   0,   4,   0, 
-     92,  11,   0,   0,   1,   0, 
-     64,   0,   4,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,   8,   0,   4,   0, 
-     92,  11,   0,   0,   1,   0, 
-     64,   0,   8,   0,   0,   0, 
-     22,   0,  80,  17,   0,   0, 
-      5,   0,  12,   0,   4,   0, 
-    112,  11,   0,   0,   1,   0, 
-     44,   0,  28,   0,   0,   0, 
-      2,   0,   6,   0, 244,   0, 
-      0,   0,  24,   0,   0,   0, 
-      1,   0,   0,   0,  16,   1, 
-     40,  19,  73,  84,  74, 167, 
-     33,  72, 195, 111, 254, 118, 
-     47, 204, 252,  24,   0,   0, 
-    242,   0,   0,   0, 192,   9, 
-      0,   0,   0,   0,   0,   0, 
-      1,   0,   1,   0, 156,  11, 
-      0,   0,   0,   0,   0,   0, 
-    206,   0,   0,   0, 180,   9, 
-      0,   0, 176,   0,   0,   0, 
-     60,   0,   0, 128, 176,   0, 
-      0,   0,  60,   0,   0,   0, 
-    208,   0,   0,   0,  61,   0, 
-      0, 128, 208,   0,   0,   0, 
-     61,   0,   0,   0, 240,   0, 
-      0,   0,  62,   0,   0, 128, 
-    240,   0,   0,   0,  62,   0, 
-      0,   0,   4,   1,   0,   0, 
-     62,   0,   0, 128,   4,   1, 
-      0,   0,  62,   0,   0,   0, 
-     24,   1,   0,   0,  62,   0, 
-      0, 128,  24,   1,   0,   0, 
-     62,   0,   0,   0,  44,   1, 
-      0,   0,  62,   0,   0, 128, 
-     44,   1,   0,   0,  62,   0, 
-      0,   0,  48,   1,   0,   0, 
-     62,   0,   0, 128,  48,   1, 
-      0,   0,  62,   0,   0,   0, 
-     80,   1,   0,   0,  62,   0, 
-      0, 128,  80,   1,   0,   0, 
-     62,   0,   0,   0,  92,   1, 
-      0,   0,  64,   0,   0, 128, 
-     92,   1,   0,   0,  64,   0, 
-      0,   0, 136,   1,   0,   0, 
-     64,   0,   0, 128, 136,   1, 
-      0,   0,  64,   0,   0,   0, 
-    180,   1,   0,   0,  64,   0, 
-      0, 128, 180,   1,   0,   0, 
-     64,   0,   0,   0, 224,   1, 
-      0,   0,  64,   0,   0, 128, 
-    224,   1,   0,   0,  64,   0, 
-      0,   0, 248,   1,   0,   0, 
-     64,   0,   0, 128, 248,   1, 
-      0,   0,  64,   0,   0,   0, 
-     20,   2,   0,   0,  64,   0, 
-      0, 128,  20,   2,   0,   0, 
-     64,   0,   0,   0,  40,   2, 
-      0,   0,  64,   0,   0, 128, 
-     40,   2,   0,   0,  64,   0, 
-      0,   0,  68,   2,   0,   0, 
-     64,   0,   0, 128,  68,   2, 
-      0,   0,  64,   0,   0,   0, 
-     80,   2,   0,   0,  65,   0, 
-      0, 128,  80,   2,   0,   0, 
-     62,   0,   0,   0, 108,   2, 
-      0,   0,  65,   0,   0, 128, 
-    108,   2,   0,   0,  65,   0, 
-      0,   0, 112,   2,   0,   0, 
-     65,   0,   0, 128, 112,   2, 
-      0,   0,  65,   0,   0,   0, 
-    116,   2,   0,   0,  66,   0, 
-      0, 128, 116,   2,   0,   0, 
-     66,   0,   0,   0, 160,   2, 
-      0,   0,  66,   0,   0, 128, 
-    160,   2,   0,   0,  66,   0, 
-      0,   0, 204,   2,   0,   0, 
-     66,   0,   0, 128, 204,   2, 
-      0,   0,  66,   0,   0,   0, 
-    248,   2,   0,   0,  66,   0, 
-      0, 128, 248,   2,   0,   0, 
-     66,   0,   0,   0,  36,   3, 
-      0,   0,  66,   0,   0, 128, 
-     36,   3,   0,   0,  66,   0, 
-      0,   0,  80,   3,   0,   0, 
-     66,   0,   0, 128,  80,   3, 
-      0,   0,  66,   0,   0,   0, 
-    124,   3,   0,   0,  66,   0, 
-      0, 128, 124,   3,   0,   0, 
-     66,   0,   0,   0, 148,   3, 
-      0,   0,  66,   0,   0, 128, 
-    148,   3,   0,   0,  66,   0, 
-      0,   0, 176,   3,   0,   0, 
-     66,   0,   0, 128, 176,   3, 
-      0,   0,  66,   0,   0,   0, 
-    204,   3,   0,   0,  66,   0, 
-      0, 128, 204,   3,   0,   0, 
-     66,   0,   0,   0, 232,   3, 
-      0,   0,  62,   0,   0, 128, 
-    232,   3,   0,   0,  62,   0, 
-      0,   0,   4,   4,   0,   0, 
-     67,   0,   0, 128,   4,   4, 
-      0,   0,  67,   0,   0,   0, 
-      8,   4,   0,   0,  68,   0, 
-      0, 128,   8,   4,   0,   0, 
-     68,   0,   0,   0,  28,   4, 
-      0,   0,  68,   0,   0, 128, 
-     28,   4,   0,   0,  68,   0, 
-      0,   0,  48,   4,   0,   0, 
-     68,   0,   0, 128,  48,   4, 
-      0,   0,  68,   0,   0,   0, 
-     68,   4,   0,   0,  68,   0, 
-      0, 128,  68,   4,   0,   0, 
-     68,   0,   0,   0,  88,   4, 
-      0,   0,  68,   0,   0, 128, 
-     88,   4,   0,   0,  68,   0, 
-      0,   0,  92,   4,   0,   0, 
-     68,   0,   0, 128,  92,   4, 
-      0,   0,  68,   0,   0,   0, 
-    124,   4,   0,   0,  68,   0, 
-      0, 128, 124,   4,   0,   0, 
-     68,   0,   0,   0, 136,   4, 
-      0,   0,  70,   0,   0, 128, 
-    136,   4,   0,   0,  70,   0, 
-      0,   0, 180,   4,   0,   0, 
-     70,   0,   0, 128, 180,   4, 
-      0,   0,  70,   0,   0,   0, 
-    224,   4,   0,   0,  70,   0, 
-      0, 128, 224,   4,   0,   0, 
-     70,   0,   0,   0,  12,   5, 
-      0,   0,  70,   0,   0, 128, 
-     12,   5,   0,   0,  70,   0, 
-      0,   0,  36,   5,   0,   0, 
-     70,   0,   0, 128,  36,   5, 
-      0,   0,  70,   0,   0,   0, 
-     64,   5,   0,   0,  71,   0, 
-      0, 128,  64,   5,   0,   0, 
-     71,   0,   0,   0, 108,   5, 
-      0,   0,  71,   0,   0, 128, 
-    108,   5,   0,   0,  71,   0, 
-      0,   0, 136,   5,   0,   0, 
-     71,   0,   0, 128, 136,   5, 
-      0,   0,  71,   0,   0,   0, 
-    156,   5,   0,   0,  71,   0, 
-      0, 128, 156,   5,   0,   0, 
-     71,   0,   0,   0, 184,   5, 
-      0,   0,  72,   0,   0, 128, 
-    184,   5,   0,   0,  72,   0, 
-      0,   0, 212,   5,   0,   0, 
-     72,   0,   0, 128, 212,   5, 
-      0,   0,  72,   0,   0,   0, 
-    232,   5,   0,   0,  72,   0, 
-      0, 128, 232,   5,   0,   0, 
-     72,   0,   0,   0,   4,   6, 
-      0,   0,  72,   0,   0, 128, 
-      4,   6,   0,   0,  72,   0, 
-      0,   0,  32,   6,   0,   0, 
-     73,   0,   0, 128,  32,   6, 
-      0,   0,  73,   0,   0,   0, 
-     52,   6,   0,   0,  73,   0, 
-      0, 128,  52,   6,   0,   0, 
-     73,   0,   0,   0,  80,   6, 
-      0,   0,  73,   0,   0, 128, 
-     80,   6,   0,   0,  73,   0, 
-      0,   0,  92,   6,   0,   0, 
-     75,   0,   0, 128,  92,   6, 
-      0,   0,  75,   0,   0,   0, 
-    136,   6,   0,   0,  75,   0, 
-      0, 128, 136,   6,   0,   0, 
-     75,   0,   0,   0, 180,   6, 
-      0,   0,  75,   0,   0, 128, 
-    180,   6,   0,   0,  75,   0, 
-      0,   0, 224,   6,   0,   0, 
-     75,   0,   0, 128, 224,   6, 
-      0,   0,  75,   0,   0,   0, 
-    252,   6,   0,   0,  75,   0, 
-      0, 128, 252,   6,   0,   0, 
-     75,   0,   0,   0,  24,   7, 
-      0,   0,  75,   0,   0, 128, 
-     24,   7,   0,   0,  75,   0, 
-      0,   0,  52,   7,   0,   0, 
-     76,   0,   0, 128,  52,   7, 
-      0,   0,  76,   0,   0,   0, 
-     76,   7,   0,   0,  76,   0, 
-      0, 128,  76,   7,   0,   0, 
-     76,   0,   0,   0, 104,   7, 
-      0,   0,  76,   0,   0, 128, 
-    104,   7,   0,   0,  76,   0, 
-      0,   0, 124,   7,   0,   0, 
-     76,   0,   0, 128, 124,   7, 
-      0,   0,  76,   0,   0,   0, 
-    152,   7,   0,   0,  76,   0, 
-      0, 128, 152,   7,   0,   0, 
-     76,   0,   0,   0, 180,   7, 
-      0,   0,  76,   0,   0, 128, 
-    180,   7,   0,   0,  76,   0, 
-      0,   0, 208,   7,   0,   0, 
-     76,   0,   0, 128, 208,   7, 
-      0,   0,  76,   0,   0,   0, 
-    232,   7,   0,   0,  76,   0, 
-      0, 128, 232,   7,   0,   0, 
-     76,   0,   0,   0,   4,   8, 
-      0,   0,  76,   0,   0, 128, 
-      4,   8,   0,   0,  76,   0, 
-      0,   0,  32,   8,   0,   0, 
-     76,   0,   0, 128,  32,   8, 
-      0,   0,  76,   0,   0,   0, 
-     60,   8,   0,   0,  76,   0, 
-      0, 128,  60,   8,   0,   0, 
-     76,   0,   0,   0,  80,   8, 
-      0,   0,  76,   0,   0, 128, 
-     80,   8,   0,   0,  76,   0, 
-      0,   0, 108,   8,   0,   0, 
-     76,   0,   0, 128, 108,   8, 
-      0,   0,  76,   0,   0,   0, 
-    132,   8,   0,   0,  76,   0, 
-      0, 128, 132,   8,   0,   0, 
-     76,   0,   0,   0, 164,   8, 
-      0,   0,  76,   0,   0, 128, 
-    164,   8,   0,   0,  76,   0, 
-      0,   0, 192,   8,   0,   0, 
-     76,   0,   0, 128, 192,   8, 
-      0,   0,  76,   0,   0,   0, 
-    212,   8,   0,   0,  76,   0, 
-      0, 128, 212,   8,   0,   0, 
-     76,   0,   0,   0, 240,   8, 
-      0,   0,  76,   0,   0, 128, 
-    240,   8,   0,   0,  76,   0, 
-      0,   0,  12,   9,   0,   0, 
-     77,   0,   0, 128,  12,   9, 
-      0,   0,  77,   0,   0,   0, 
-     32,   9,   0,   0,  77,   0, 
-      0, 128,  32,   9,   0,   0, 
-     77,   0,   0,   0,  60,   9, 
-      0,   0,  77,   0,   0, 128, 
-     60,   9,   0,   0,  77,   0, 
-      0,   0,  72,   9,   0,   0, 
-     78,   0,   0, 128,  72,   9, 
-      0,   0,  78,   0,   0,   0, 
-    116,   9,   0,   0,  78,   0, 
-      0, 128, 116,   9,   0,   0, 
-     78,   0,   0,   0, 160,   9, 
-      0,   0,  78,   0,   0, 128, 
-    160,   9,   0,   0,  78,   0, 
-      0,   0, 204,   9,   0,   0, 
-     78,   0,   0, 128, 204,   9, 
-      0,   0,  78,   0,   0,   0, 
-    232,   9,   0,   0,  78,   0, 
-      0, 128, 232,   9,   0,   0, 
-     78,   0,   0,   0,   4,  10, 
-      0,   0,  78,   0,   0, 128, 
-      4,  10,   0,   0,  78,   0, 
-      0,   0,  32,  10,   0,   0, 
-     78,   0,   0, 128,  32,  10, 
-      0,   0,  78,   0,   0,   0, 
-     36,  10,   0,   0,  79,   0, 
-      0, 128,  36,  10,   0,   0, 
-     79,   0,   0,   0,  40,  10, 
-      0,   0,  80,   0,   0, 128, 
-     40,  10,   0,   0,  68,   0, 
-      0,   0,  68,  10,   0,   0, 
-     80,   0,   0, 128,  68,  10, 
-      0,   0,  80,   0,   0,   0, 
-     72,  10,   0,   0,  81,   0, 
-      0, 128,  72,  10,   0,   0, 
-     81,   0,   0,   0, 116,  10, 
-      0,   0,  82,   0,   0, 128, 
-    116,  10,   0,   0,  82,   0, 
-      0,   0, 148,  10,   0,   0, 
-     82,   0,   0, 128, 148,  10, 
-      0,   0,  82,   0,   0,   0, 
-    180,  10,   0,   0,  82,   0, 
-      0, 128, 180,  10,   0,   0, 
-     82,   0,   0,   0, 208,  10, 
-      0,   0,  82,   0,   0, 128, 
-    208,  10,   0,   0,  82,   0, 
-      0,   0, 240,  10,   0,   0, 
-     82,   0,   0, 128, 240,  10, 
-      0,   0,  82,   0,   0,   0, 
-     12,  11,   0,   0,  82,   0, 
-      0, 128,  12,  11,   0,   0, 
-     82,   0,   0,   0,  52,  11, 
-      0,   0,  82,   0,   0, 128, 
-     52,  11,   0,   0,  82,   0, 
-      0,   0,  92,  11,   0,   0, 
-     83,   0,   0, 128,  92,  11, 
-      0,   0,  83,   0,   0,   0, 
-    112,  11,   0,   0,  84,   0, 
-      0, 128, 112,  11,   0,   0, 
-     84,   0,   0,   0, 132,  11, 
-      0,   0,  84,   0,   0, 128, 
-    132,  11,   0,   0,  84,   0, 
-      0,   0, 152,  11,   0,   0, 
-     84,   0,   0, 128, 152,  11, 
-      0,   0,  84,   0,   0,   0, 
-      5,   0,  44,   0,  27,   0, 
-     43,   0,   5,   0,  45,   0, 
-     28,   0,  44,   0,   5,   0, 
-     48,   0,  14,   0,  18,   0, 
-      5,   0,  48,   0,   5,   0, 
-     48,   0,   5,   0,  48,   0, 
-      5,   0,  48,   0,   5,   0, 
-     48,   0,   5,   0,  48,   0, 
-      5,   0,  48,   0,  21,   0, 
-     41,   0,   5,   0,  48,   0, 
-     21,   0,  41,   0,   9,   0, 
-     67,   0,  33,   0,  49,   0, 
-      9,   0,  67,   0,  33,   0, 
-     49,   0,   9,   0,  67,   0, 
-     33,   0,  49,   0,   9,   0, 
-     67,   0,  32,   0,  59,   0, 
-      9,   0,  67,   0,  13,   0, 
-     61,   0,   9,   0,  67,   0, 
-     13,   0,  65,   0,   9,   0, 
-     67,   0,  13,   0,  65,   0, 
-      9,   0,  67,   0,   9,   0, 
-     67,   0,  13,   0,  21,   0, 
-     44,   0,  46,   0,  13,   0, 
-     21,   0,  13,   0,  21,   0, 
-     21,   0,  21,   0,  21,   0, 
-     21,   0,   9,   0, 100,   0, 
-     25,   0,  41,   0,   9,   0, 
-    100,   0,  25,   0,  41,   0, 
-      9,   0, 100,   0,  25,   0, 
-     41,   0,   9,   0, 100,   0, 
-     71,   0,  87,   0,   9,   0, 
-    100,   0,  71,   0,  87,   0, 
-      9,   0, 100,   0,  71,   0, 
-     87,   0,   9,   0, 100,   0, 
-     70,   0,  97,   0,   9,   0, 
-    100,   0,  51,   0,  99,   0, 
-      9,   0, 100,   0,  25,   0, 
-     99,   0,   9,   0, 100,   0, 
-      9,   0,  99,   0,  44,   0, 
-     46,   0,  44,   0,  46,   0, 
-      5,   0,   5,   0,   5,   0, 
-      5,   0,   5,   0,  46,   0, 
-     14,   0,  18,   0,   5,   0, 
-     46,   0,   5,   0,  46,   0, 
-      5,   0,  46,   0,   5,   0, 
-     46,   0,   5,   0,  46,   0, 
-      5,   0,  46,   0,   5,   0, 
-     46,   0,   5,   0,  46,   0, 
-      5,   0,  46,   0,  21,   0, 
-     39,   0,   5,   0,  46,   0, 
-     21,   0,  39,   0,   9,   0, 
-     73,   0,  27,   0,  42,   0, 
-      9,   0,  73,   0,  27,   0, 
-     42,   0,   9,   0,  73,   0, 
-     27,   0,  42,   0,   9,   0, 
-     73,   0,  27,   0,  72,   0, 
-      9,   0,  73,   0,  27,   0, 
-     72,   0,   9,   0,  68,   0, 
-     24,   0,  39,   0,   9,   0, 
-     68,   0,  50,   0,  67,   0, 
-      9,   0,  68,   0,  50,   0, 
-     67,   0,   9,   0,  68,   0, 
-     24,   0,  67,   0,   9,   0, 
-     61,   0,  38,   0,  58,   0, 
-      9,   0,  61,   0,  38,   0, 
-     58,   0,   9,   0,  61,   0, 
-     38,   0,  58,   0,   9,   0, 
-     61,   0,  19,   0,  60,   0, 
-      9,   0,  19,   0,  13,   0, 
-     17,   0,   9,   0,  19,   0, 
-     13,   0,  17,   0,   9,   0, 
-     19,   0,   9,   0,  19,   0, 
-     13,   0,  64,   0,  29,   0, 
-     44,   0,  13,   0,  64,   0, 
-     29,   0,  44,   0,  13,   0, 
-     64,   0,  29,   0,  44,   0, 
-     13,   0,  64,   0,  29,   0, 
-     54,   0,  13,   0,  64,   0, 
-     29,   0,  63,   0,  13,   0, 
-     64,   0,  13,   0,  63,   0, 
-     13,   0, 133,   0,  53,   0, 
-     61,   0,  13,   0, 133,   0, 
-     42,   0,  63,   0,  13,   0, 
-    133,   0,  42,   0,  63,   0, 
-     13,   0, 133,   0,  42,   0, 
-     63,   0,  13,   0, 133,   0, 
-     33,   0,  79,   0,  13,   0, 
-    133,   0,  33,   0,  79,   0, 
-     13,   0, 133,   0,  33,   0, 
-     79,   0,  13,   0, 133,   0, 
-     33,   0,  79,   0,  13,   0, 
-    133,   0,  33,   0,  79,   0, 
-     13,   0, 133,   0,  22,   0, 
-     81,   0,  13,   0, 133,   0, 
-     22,   0,  81,   0,  13,   0, 
-    133,   0,  22,   0,  81,   0, 
-     13,   0, 133,   0,  95,   0, 
-    128,   0,  13,   0, 133,   0, 
-     95,   0, 128,   0,  13,   0, 
-    133,   0,  84,   0, 130,   0, 
-     13,   0, 133,   0,  84,   0, 
-    130,   0,  13,   0, 133,   0, 
-     84,   0, 130,   0,  13,   0, 
-    133,   0,  17,   0, 132,   0, 
-     13,   0,  23,   0,  17,   0, 
-     21,   0,  13,   0,  23,   0, 
-     17,   0,  21,   0,  13,   0, 
-     23,   0,  13,   0,  23,   0, 
-     17,   0,  69,   0,  34,   0, 
-     49,   0,  17,   0,  69,   0, 
-     34,   0,  49,   0,  17,   0, 
-     69,   0,  34,   0,  49,   0, 
-     17,   0,  69,   0,  34,   0, 
-     59,   0,  17,   0,  69,   0, 
-     34,   0,  68,   0,  17,   0, 
-     69,   0,  17,   0,  68,   0, 
-     69,   0,  69,   0,  69,   0, 
-     69,   0,   9,   0,   9,   0, 
-      9,   0,   9,   0,   5,   0, 
-      5,   0,  42,   0,  44,   0, 
-      5,   0,   5,   0,   5,   0, 
-      5,   0,   5,   0,  73,   0, 
-     28,   0,  72,   0,   5,   0, 
-    227,   0,  37,   0,  65,   0, 
-      5,   0, 227,   0,  69,   0, 
-    142,   0,   5,   0, 227,   0, 
-     37,   0, 142,   0,   5,   0, 
-    227,   0, 146,   0, 224,   0, 
-      5,   0, 227,   0,  37,   0, 
-    224,   0,   5,   0, 227,   0, 
-     27,   0, 226,   0,   5,   0, 
-    227,   0,  27,   0, 226,   0, 
-      5,   0,  37,   0,   5,   0, 
-     36,   0,   5,   0,  24,   0, 
-      5,   0,  24,   0,   5,   0, 
-     24,   0,   5,   0,  24,   0, 
-      5,   0,  24,   0,   5,   0, 
-     24,   0, 246,   0,   0,   0, 
-      4,   0,   0,   0,   0,   0, 
-      0,   0,  44,   0,   0,   0, 
-      0,   0,   0,   0,  36,   0, 
-      0,   0,  72,   0,   0,   0, 
-    104,   0,   0,   0, 136,   0, 
-      0,   0, 172,   0,   0,   0, 
-    208,   0,   0,   0, 244,   0, 
-      0,   0,  28,   1,   0,   0, 
-     64,   1,   0,   0, 100,   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,  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,  58,   0, 
-      3,  18,  13,  21,   3,   0, 
-      2,  16,   0,   0,   0,   0, 
-    112, 111, 115, 105, 116, 105, 
-    111, 110,   0, 241,  13,  21, 
-      3,   0,   2,  16,   0,   0, 
-     16,   0,  99, 111, 108, 111, 
-    114,   0,  13,  21,   3,   0, 
-     64,   0,   0,   0,  28,   0, 
-    114,  97, 100, 105, 117, 115, 
-      0, 243, 242, 241,  34,   0, 
-      5,  21,   3,   0,   0,   0, 
-     24,  16,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     32,   0,  80, 111, 105, 110, 
-    116,  76, 105, 103, 104, 116, 
-      0, 243, 242, 241,  14,   0, 
-     23,  21,  25,  16,   0,   0, 
-     26,   2,   0,   0,   0,   0, 
-    242, 241,  10,   0,  24,  21, 
-     26,  16,   0,   0,   1,   0, 
-      1,   0,  10,   0,  24,  21, 
-     27,  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, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   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,  29,  16, 
-      0,   0, 112,   2,   0,   0, 
-     10,   0, 255, 255,   4,   0, 
-      0,   0, 255, 255,   3,   0, 
-      0,   0,   0,   0, 116,   0, 
-      0,   0, 116,   0,   0,   0, 
-      8,   0,   0,   0, 124,   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, 
-     78,   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,  38,   0,   5,  21, 
-      4,   0,   0,   0,   3,  16, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  52,   0, 
-     80, 105, 120, 101, 108,  73, 
-    110, 112, 117, 116,  84, 121, 
-    112, 101,   0, 243, 242, 241, 
-     10,   0,   1,  18,   1,   0, 
-      0,   0,   4,  16,   0,   0, 
-     10,   0,  24,  21,   0,  16, 
-      0,   0,   1,   0,   1,   0, 
-     14,   0,   8,  16,   6,  16, 
-      0,   0,  23,   0,   1,   0, 
-      5,  16,   0,   0,  14,   0, 
-     23,  21,   0,  16,   0,   0, 
-      3,   2, 224,   3,   0,   0, 
-    242, 241,  10,   0,  24,  21, 
-      8,  16,   0,   0,   1,   0, 
-      1,   0,  10,   0,  24,  21, 
-      9,  16,   0,   0,   1,   0, 
-      0,   2,  14,   0,  23,  21, 
-      0,   0,   0,   0,  10,   2, 
-      0,   0,   0,   0, 242, 241, 
-     10,   0,  24,  21,  11,  16, 
-      0,   0,   1,   0,   1,   0, 
-     10,   0,  24,  21,  12,  16, 
-      0,   0,   1,   0,   0,   2, 
-     10,   0,  24,  21,   6,  16, 
-      0,   0,   1,   0,   0,   2, 
-     10,   0,  24,  21,  64,   0, 
-      0,   0,   1,   0,   1,   0, 
-     10,   0,  24,  21,  15,  16, 
-      0,   0,   1,   0,   0,   2, 
-     10,   0,  24,  21, 116,   0, 
-      0,   0,   1,   0,   1,   0, 
-     10,   0,  24,  21,  17,  16, 
-      0,   0,   1,   0,   0,   2, 
-     38,   0,   3,  18,  13,  21, 
-      3,   0,   2,  16,   0,   0, 
-      0,   0, 100, 105, 114, 101, 
-     99, 116, 105, 111, 110,   0, 
-     13,  21,   3,   0,   2,  16, 
-      0,   0,  16,   0,  99, 111, 
-    108, 111, 114,   0,  34,   0, 
-      5,  21,   2,   0,   0,   0, 
-     19,  16,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     28,   0,  68, 105, 102, 102, 
-    117, 115, 101,  76, 105, 103, 
-    104, 116,   0, 241,  14,   0, 
-     23,  21,  20,  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,  32,  80, 111, 105, 
-    110, 116,  76, 105, 103, 104, 
-    116,  13,  10, 123,  13,  10, 
-     32,  32,  32,  32, 102, 108, 
-    111,  97, 116,  51,  32, 112, 
-    111, 115, 105, 116, 105, 111, 
-    110,  59,  13,  10,  32,  32, 
-     32,  32, 102, 108, 111,  97, 
-    116,  51,  32,  99, 111, 108, 
-    111, 114,  59,  13,  10,  32, 
-     32,  32,  32, 102, 108, 111, 
-     97, 116,  32, 114,  97, 100, 
-    105, 117, 115,  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,  32, 
-     68, 105, 102, 102, 117, 115, 
-    101,  76, 105, 103, 104, 116, 
-     32,  62,  32, 100, 105, 102, 
-    117, 115, 101,  76, 105, 103, 
-    104, 116, 115,  32,  58,  32, 
-    114, 101, 103, 105, 115, 116, 
-    101, 114,  40,  32, 116,  49, 
-     32,  41,  59,  13,  10,  83, 
-    116, 114, 117,  99, 116, 117, 
-    114, 101, 100,  66, 117, 102, 
-    102, 101, 114,  60,  32,  80, 
-    111, 105, 110, 116,  76, 105, 
-    103, 104, 116,  32,  62,  32, 
-    112, 111, 105, 110, 116,  76, 
-    105, 103, 104, 116, 115,  32, 
-     58,  32, 114, 101, 103, 105, 
-    115, 116, 101, 114,  40,  32, 
-    116,  50,  32,  41,  59,  13, 
-     10,  13,  10,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  13, 
-     10,  47,  47,  32,  84,  89, 
-     80,  69,  68,  69,  70,  83, 
-     32,  47,  47,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  13,  10,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  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, 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,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  13, 
-     10,  47,  47,  32,  80, 105, 
-    120, 101, 108,  32,  83, 104, 
-     97, 100, 101, 114,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  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,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  13,  10, 102, 108, 111, 
-     97, 116,  52,  32,  84, 101, 
-    120, 116, 117, 114, 101,  80, 
-    105, 120, 101, 108,  83, 104, 
-     97, 100, 101, 114,  40,  32, 
-     80, 105, 120, 101, 108,  73, 
-    110, 112, 117, 116,  84, 121, 
-    112, 101,  32, 105, 110, 112, 
-    117, 116,  32,  41,  32,  58, 
-     32,  83,  86,  95,  84,  65, 
-     82,  71,  69,  84,  13,  10, 
-    123,  13,  10,  32,  32,  32, 
-     32, 102, 108, 111,  97, 116, 
-     51,  32, 100, 105, 102, 102, 
-    117, 115, 101,  76, 105, 103, 
-    104, 116,  32,  61,  32, 102, 
-    108, 111,  97, 116,  51,  40, 
-     32,  48,  44,  32,  48,  44, 
-     32,  48,  32,  41,  59,  13, 
-     10,  32,  32,  32,  32, 102, 
-    108, 111,  97, 116,  51,  32, 
-    115, 112, 101,  99, 117, 108, 
-     97, 114,  76, 105, 103, 104, 
-    116,  32,  61,  32, 102, 108, 
-    111,  97, 116,  51,  40,  32, 
-     48,  44,  32,  48,  44,  32, 
-     48,  32,  41,  59,  13,  10, 
-     32,  32,  32,  32, 102, 111, 
-    114,  40,  32, 105, 110, 116, 
-     32, 106,  32,  61,  32,  48, 
-     59,  32, 106,  32,  60,  32, 
-    100, 105, 102, 102, 117, 115, 
-    101,  76, 105, 103, 104, 116, 
-     67, 111, 117, 110, 116,  59, 
-     32, 106,  43,  43,  32,  41, 
-     13,  10,  32,  32,  32,  32, 
-    123,  13,  10,  32,  32,  32, 
-     32,  32,  32,  32,  32, 105, 
-    102,  40,  32, 100, 111, 116, 
-     40,  32, 105, 110, 112, 117, 
-    116,  46, 110, 111, 114, 109, 
-     97, 108,  44,  32,  45, 100, 
-    105, 102, 117, 115, 101,  76, 
-    105, 103, 104, 116, 115,  91, 
-     32, 106,  32,  93,  46, 100, 
-    105, 114, 101,  99, 116, 105, 
-    111, 110,  32,  41,  32,  60, 
-     32,  48,  32,  41,  13,  10, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     99, 111, 110, 116, 105, 110, 
-    117, 101,  59,  13,  10,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32, 100, 105, 102, 102, 117, 
-    115, 101,  76, 105, 103, 104, 
-    116,  32,  43,  61,  32, 100, 
-    105, 102, 117, 115, 101,  76, 
-    105, 103, 104, 116, 115,  91, 
-     32, 106,  32,  93,  46,  99, 
-    111, 108, 111, 114,  32,  42, 
-     32, 100, 111, 116,  40,  32, 
-    105, 110, 112, 117, 116,  46, 
-    110, 111, 114, 109,  97, 108, 
-     44,  32,  45, 100, 105, 102, 
-    117, 115, 101,  76, 105, 103, 
-    104, 116, 115,  91,  32, 106, 
-     32,  93,  46, 100, 105, 114, 
-    101,  99, 116, 105, 111, 110, 
-     32,  41,  59,  13,  10,  32, 
-     32,  32,  32, 125,  13,  10, 
-     32,  32,  32,  32, 102, 111, 
-    114,  40,  32, 105, 110, 116, 
-     32, 105,  32,  61,  32,  48, 
-     59,  32, 105,  32,  60,  32, 
-    112, 111, 105, 110, 116,  76, 
-    105, 103, 104, 116,  67, 111, 
-    117, 110, 116,  59,  32, 105, 
-     43,  43,  32,  41,  13,  10, 
-     32,  32,  32,  32, 123,  13, 
-     10,  32,  32,  32,  32,  32, 
-     32,  32,  32, 102, 108, 111, 
-     97, 116,  51,  32, 108, 105, 
-    103, 104, 116,  68, 105, 114, 
-     32,  61,  32, 112, 111, 105, 
-    110, 116,  76, 105, 103, 104, 
-    116, 115,  91,  32, 105,  32, 
-     93,  46, 112, 111, 115, 105, 
-    116, 105, 111, 110,  32,  45, 
-     32, 105, 110, 112, 117, 116, 
-     46, 119, 111, 114, 108, 100, 
-     80, 111, 115,  46, 120, 121, 
-    122,  59,  13,  10,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-    102, 108, 111,  97, 116,  32, 
-    102,  97,  99, 116, 111, 114, 
-     32,  61,  32, 112, 111, 105, 
-    110, 116,  76, 105, 103, 104, 
-    116, 115,  91,  32, 105,  32, 
-     93,  46, 114,  97, 100, 105, 
-    117, 115,  32,  47,  32, 108, 
-    101, 110, 103, 116, 104,  40, 
-     32, 108, 105, 103, 104, 116, 
-     68, 105, 114,  32,  41,  59, 
-     13,  10,  32,  32,  32,  32, 
-     32,  32,  32,  32, 102, 108, 
-    111,  97, 116,  32, 102,  32, 
-     61,  32, 100, 111, 116,  40, 
-     32, 105, 110, 112, 117, 116, 
-     46, 110, 111, 114, 109,  97, 
-    108,  44,  32, 110, 111, 114, 
-    109,  97, 108, 105, 122, 101, 
-     40,  32, 108, 105, 103, 104, 
-    116,  68, 105, 114,  32,  41, 
-     32,  41,  59,  13,  10,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32, 105, 102,  40,  32, 102, 
-     32,  62,  32,  48,  32,  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, 105, 102, 102, 117, 
-    115, 101,  76, 105, 103, 104, 
-    116,  32,  43,  61,  32, 112, 
-    111, 105, 110, 116,  76, 105, 
-    103, 104, 116, 115,  91,  32, 
-    105,  32,  93,  46,  99, 111, 
-    108, 111, 114,  32,  42,  32, 
-    102,  32,  42,  32, 102,  97, 
-     99, 116, 111, 114,  59,  13, 
-     10,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32, 102,  32,  61,  32, 100, 
-    111, 116,  40,  32, 110, 111, 
-    114, 109,  97, 108, 105, 122, 
-    101,  40,  32, 114, 101, 102, 
-    108, 101,  99, 116,  40,  32, 
-    110, 111, 114, 109,  97, 108, 
-    105, 122, 101,  40,  32,  45, 
-    108, 105, 103, 104, 116,  68, 
-    105, 114,  32,  41,  44,  32, 
-    105, 110, 112, 117, 116,  46, 
-    110, 111, 114, 109,  97, 108, 
-     32,  41,  32,  41,  44,  32, 
-    110, 111, 114, 109,  97, 108, 
-    105, 122, 101,  40,  32, 107, 
-     80, 111, 115, 105, 116, 105, 
-    111, 110,  46, 120, 121, 122, 
-     32,  45,  32, 105, 110, 112, 
-    117, 116,  46, 119, 111, 114, 
-    108, 100,  80, 111, 115,  46, 
-    120, 121, 122,  32,  41,  32, 
-     41,  59,  13,  10,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32, 105, 102, 
-     40,  32, 102,  32,  62,  32, 
-     48,  32,  41,  13,  10,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32, 115, 112, 101, 
-     99, 117, 108,  97, 114,  76, 
-    105, 103, 104, 116,  32,  43, 
-     61,  32, 112, 111, 105, 110, 
-    116,  76, 105, 103, 104, 116, 
-    115,  91,  32, 105,  32,  93, 
-     46,  99, 111, 108, 111, 114, 
-     32,  42,  32, 102,  32,  42, 
-     32, 102,  97,  99, 116, 111, 
-    114,  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, 102, 108, 111,  97, 
-    116,  52,  32, 109,  97, 116, 
-    101, 114, 105,  97, 108,  67, 
-    111, 108, 111, 114,  32,  61, 
-     32, 115, 104,  97, 100, 101, 
-    114,  84, 101, 120, 116, 117, 
-    114, 101,  46,  83,  97, 109, 
-    112, 108, 101,  40,  32,  83, 
-     97, 109, 112, 108, 101,  84, 
-    121, 112, 101,  44,  32, 105, 
-    110, 112, 117, 116,  46, 116, 
-    101, 120,  32,  41,  59,  13, 
-     10,  32,  32,  32,  32, 102, 
-    108, 111,  97, 116,  52,  32, 
-    116, 101, 120, 116, 117, 114, 
-    101,  67, 111, 108, 111, 114, 
-     32,  61,  32, 115,  97, 116, 
-    117, 114,  97, 116, 101,  40, 
-     32, 109,  97, 116, 101, 114, 
-    105,  97, 108,  67, 111, 108, 
-    111, 114,  32,  42,  32,  97, 
-    109,  98, 105, 101, 110, 116, 
-     70,  97,  99, 116, 111, 114, 
-     32,  43,  32, 102, 108, 111, 
-     97, 116,  52,  40,  32, 100, 
-    105, 102, 102, 117, 115, 101, 
-     76, 105, 103, 104, 116,  46, 
-    120,  44,  32, 100, 105, 102, 
-    102, 117, 115, 101,  76, 105, 
-    103, 104, 116,  46, 121,  44, 
-     32, 100, 105, 102, 102, 117, 
-    115, 101,  76, 105, 103, 104, 
-    116,  46, 122,  44,  32,  48, 
-     32,  41,  32,  42,  32, 100, 
-    105, 102, 102, 117, 115,  70, 
-     97,  99, 116, 111, 114,  32, 
-     43,  32, 102, 108, 111,  97, 
-    116,  52,  40,  32, 115, 112, 
-    101,  99, 117, 108,  97, 114, 
-     76, 105, 103, 104, 116,  46, 
-    120,  44,  32, 115, 112, 101, 
-     99, 117, 108,  97, 114,  76, 
-    105, 103, 104, 116,  46, 121, 
-     44,  32, 115, 112, 101,  99, 
-    117, 108,  97, 114,  76, 105, 
-    103, 104, 116,  46, 122,  44, 
-     32,  48,  32,  41,  32,  42, 
-     32, 115, 112, 101,  99, 117, 
-    108,  97, 114,  70,  97,  99, 
-    116, 111, 114,  32,  41,  59, 
-     13,  10,  32,  32,  32,  32, 
-    116, 101, 120, 116, 117, 114, 
-    101,  67, 111, 108, 111, 114, 
-     46,  97,  32,  61,  32, 109, 
-     97, 116, 101, 114, 105,  97, 
-    108,  67, 111, 108, 111, 114, 
-     46,  97,  59,  13,  10,  32, 
-     32,  32,  32, 114, 101, 116, 
-    117, 114, 110,  32, 116, 101, 
-    120, 116, 117, 114, 101,  67, 
-    111, 108, 111, 114,  59,  13, 
-     10, 125,   0,   7,   0,   0, 
-      0,   0,   0,   0,   0,  91, 
-      0,   0,   0, 182,   0,   0, 
-      0,   1,   0,   0,   0,  92, 
-      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, 
-     68,  51,  68,  83,  72,  68, 
-     82,   0, 156,  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,  88,   0, 
-      0,   0,  48,   2,   0,   0, 
-     37,   0,   0,   0,   1,   0, 
-      0,   0,  29,   1,   0,   0, 
-      1,   0,   0,   0,  65,   1, 
-      0,   0,   1,   0,   0,   0, 
-    245,   0,   0,   0,   1,   0, 
-      0,   0, 209,   0,   0,   0, 
-      1,   0,   0,   0, 173,   0, 
-      0,   0,   1,   0,   0,   0, 
-    101,   1,   0,   0,   1,   0, 
-      0,   0, 137,   0,   0,   0, 
-      1,   0,   0,   0, 105,   0, 
-      0,   0,   1,   0,   0,   0, 
-      1,   0,   0,   0,   1,   0, 
-      0,   0,  73,   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,   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, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   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, 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,   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, 
-      2,   0,   0,   0,   0,   0, 
-      0,   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, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   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, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      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,   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,  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, 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,  12,   0,   0,   0, 
-     24,   0,   0,   0,  36,   0, 
-      0,   0,  48,   0,   0,   0, 
-     60,   0,   0,   0,  72,   0, 
-      0,   0,  84,   0,   0,   0, 
-     96,   0,   0,   0, 108,   0, 
-      0,   0, 120,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      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,  80, 105, 120, 
-    101, 108,  83, 104,  97, 100, 
-    101, 114,   0,   0,   0,   0, 
-     34,   0,  81,  17,  10,  16, 
-      0,   0,   7,   0, 255, 255, 
-    255, 255,   0,   0, 255, 255, 
-    255, 255, 115, 104,  97, 100, 
-    101, 114,  84, 101, 120, 116, 
-    117, 114, 101,   0,   0,   0, 
-     30,   0,  81,  17,  13,  16, 
-      0,   0,   6,   0, 255, 255, 
-    255, 255, 255, 255,   0,   0, 
-    255, 255,  83,  97, 109, 112, 
-    108, 101,  84, 121, 112, 101, 
-      0,   0,  30,   0,  81,  17, 
-     14,  16,   0,   0,   8,   0, 
-      0,   0,   0,   0, 255, 255, 
-    255, 255, 255, 255, 107,  80, 
-    111, 115, 105, 116, 105, 111, 
-    110,   0,   0,   0,  34,   0, 
-     81,  17,  16,  16,   0,   0, 
-      8,   0,   1,   0,   0,   0, 
-    255, 255, 255, 255, 255, 255, 
-     97, 109,  98, 105, 101, 110, 
-    116,  70,  97,  99, 116, 111, 
-    114,   0,   0,   0,  34,   0, 
-     81,  17,  16,  16,   0,   0, 
-      8,   0,   1,   0,   4,   0, 
-    255, 255, 255, 255, 255, 255, 
-    100, 105, 102, 102, 117, 115, 
-     70,  97,  99, 116, 111, 114, 
-      0,   0,   0,   0,  34,   0, 
-     81,  17,  16,  16,   0,   0, 
-      8,   0,   1,   0,   8,   0, 
-    255, 255, 255, 255, 255, 255, 
-    115, 112, 101,  99, 117, 108, 
-     97, 114,  70,  97,  99, 116, 
-    111, 114,   0,   0,  38,   0, 
-     81,  17,  18,  16,   0,   0, 
-      8,   0,   2,   0,   0,   0, 
-    255, 255, 255, 255, 255, 255, 
-    100, 105, 102, 102, 117, 115, 
-    101,  76, 105, 103, 104, 116, 
-     67, 111, 117, 110, 116,   0, 
-      0,   0,  34,   0,  81,  17, 
-     18,  16,   0,   0,   8,   0, 
-      2,   0,   4,   0, 255, 255, 
-    255, 255, 255, 255, 112, 111, 
-    105, 110, 116,  76, 105, 103, 
-    104, 116,  67, 111, 117, 110, 
-    116,   0,  34,   0,  81,  17, 
-     23,  16,   0,   0,   7,   0, 
-    255, 255, 255, 255,   1,   0, 
-    255, 255, 255, 255, 100, 105, 
-    102, 117, 115, 101,  76, 105, 
-    103, 104, 116, 115,   0,   0, 
-      0,   0,  30,   0,  81,  17, 
-     28,  16,   0,   0,   7,   0, 
-    255, 255, 255, 255,   2,   0, 
-    255, 255, 255, 255, 112, 111, 
-    105, 110, 116,  76, 105, 103, 
-    104, 116, 115,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   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, 255, 255, 
-    255, 255, 119,   9,  49,   1, 
-      1,   0,   0,   0,  13,   0, 
-     10, 140,  14,   0, 180, 156, 
-     15,   0,  11,   0,  88,   0, 
-      0,   0,  32,   0,   0,   0, 
-     44,   0,   0,   0, 104,   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, 156,  11,   0,   0, 
-     32,   0,   0,  96,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   2,   0, 
-      9,   0, 160,   7,   0,   0, 
-      0,   0,   0,   0, 244,   9, 
-      0,   0,   1,   0,   0,   0, 
-    144, 122, 197,   3,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     84, 101, 120, 116, 117, 114, 
-    101,  80, 105, 120, 101, 108, 
-     83, 104,  97, 100, 101, 114, 
-      0, 110, 111, 110, 101,   0, 
-     45, 186,  46, 241,   1,   0, 
-      0,   0,   0,   0,   0,   0, 
-    156,  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, 156,  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,  79, 110, 101,  68, 114, 
-    105, 118, 101,  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,  65, 108, 108, 103, 101, 
-    109, 101, 105, 110,  92,  70, 
-    114,  97, 109, 101, 119, 111, 
-    114, 107,  92,  85,  73,  80, 
-    105, 120, 101, 108,  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,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      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,   4, 215, 
-     82,  92,   1,   0,   0,   0, 
-    175, 136, 106, 248,  57, 129, 
-      4,  70, 150,  75,  21,  29, 
-    141,  80, 154,  11, 135,   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, 111, 110, 101, 100, 
-    114, 105, 118, 101,  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,  97, 108, 108, 103, 
-    101, 109, 101, 105, 110,  92, 
-    102, 114,  97, 109, 101, 119, 
-    111, 114, 107,  92, 117, 105, 
-    112, 105, 120, 101, 108, 115, 
-    104,  97, 100, 101, 114,  46, 
-    104, 108, 115, 108,   0,   4, 
-      0,   0,   0,   6,   0,   0, 
-      0,   1,   0,   0,   0,  58, 
-      0,   0,   0,   0,   0,   0, 
-      0,  17,   0,   0,   0,   7, 
-      0,   0,   0,  10,   0,   0, 
-      0,   6,   0,   0,   0,   0, 
-      0,   0,   0,   5,   0,   0, 
-      0,  34,   0,   0,   0,   8, 
-      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,  16,   0,   0,   0, 
-     32,   0,   0,   0, 227,   0, 
-      0,   0, 168,   2,   0,   0, 
-    123,   1,   0,   0,  56,   0, 
-      0,   0,   0,   0,   0,   0, 
-    139,  13,   0,   0, 128,   0, 
-      0,   0, 164,  12,   0,   0, 
-    196,  17,   0,   0, 124,   0, 
-      0,   0,   0,   0,   0,   0, 
-     40,   0,   0,   0, 152,   2, 
-      0,   0,  44,   0,   0,   0, 
-    132,   1,   0,   0,   3,   0, 
-      0,   0,  40,   0,   0,   0, 
-     27,   0,   0,   0,  26,   0, 
-      0,   0,  39,   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,  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,  34,   0,   0,   0, 
-     35,   0,   0,   0,  36,   0, 
-      0,   0,  38,   0,   0,   0, 
-     37,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  41,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
+      7,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 

+ 252 - 3285
UIVertexShader.h

@@ -50,7 +50,7 @@
 // TEXCOORD                 1   xyz         3     NONE   float   xyz 
 //
 vs_5_0
-dcl_globalFlags refactoringAllowed | skipOptimization
+dcl_globalFlags refactoringAllowed
 dcl_constantbuffer CB0[512], dynamicIndexed
 dcl_constantbuffer CB1[8], immediateIndexed
 dcl_input v0.xyz
@@ -61,3359 +61,325 @@ dcl_output o0.xyzw
 dcl_output_siv o1.xyzw, position
 dcl_output o2.xy
 dcl_output o3.xyz
-dcl_temps 5
-//
-// 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; 
-//   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 42 "C:\Users\kolja\OneDrive\Desktop\Kolja-Strohm-Games\Allgemein\Framework\UIVertexShader.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.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 45
-mov r1.w, l(1.000000)  // r1.w <- input.position.w
-
-#line 48
-mov r2.xy, v1.xyxx  // r2.x <- output.tex.x; r2.y <- output.tex.y
-
-#line 51
-imul null, r0.w, v3.x, l(4)
-mov r1.xyz, v0.xyzx
-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 52
-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 53
-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 55
-mov o0.xyzw, r3.xyzw
-mov o1.xyzw, r4.xyzw
-mov o3.xyz, r0.xyzx
-mov o2.xy, r2.xyxx
+dcl_temps 3
+mov r0.xyz, v0.xyzx
+mov r0.w, l(1.000000)
+ishl r1.x, v3.x, l(2)
+dp4 r2.x, r0.xyzw, cb0[r1.x + 0].xyzw
+dp4 r2.y, r0.xyzw, cb0[r1.x + 1].xyzw
+dp4 r2.z, r0.xyzw, cb0[r1.x + 2].xyzw
+dp4 r2.w, r0.xyzw, cb0[r1.x + 3].xyzw
+mov o0.xyzw, r2.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
+mov o2.xy, v1.xyxx
+dp3 r0.x, v2.xyzx, cb0[r1.x + 0].xyzx
+dp3 r0.y, v2.xyzx, cb0[r1.x + 1].xyzx
+dp3 r0.z, v2.xyzx, cb0[r1.x + 2].xyzx
+dp3 r0.w, r0.xyzx, r0.xyzx
+rsq r0.w, r0.w
+mul o3.xyz, r0.wwww, r0.xyzx
 ret 
-// Approximately 28 instruction slots used
+// Approximately 24 instruction slots used
 #endif
 
 const BYTE UIVertexShader[] =
 {
-     68,  88,  66,  67, 115, 180, 
-    240, 189, 230,   4, 149,  82, 
-     98, 201,  38,  47, 175,  47, 
-     72,  26,   1,   0,   0,   0, 
-    168,  77,   0,   0,   6,   0, 
-      0,   0,  56,   0,   0,   0, 
-     20,   2,   0,   0, 168,   2, 
-      0,   0,  56,   3,   0,   0, 
-      4,   7,   0,   0, 160,   7, 
-      0,   0,  82,  68,  69,  70, 
-    212,   1,   0,   0,   2,   0, 
-      0,   0, 144,   0,   0,   0, 
-      2,   0,   0,   0,  60,   0, 
-      0,   0,   0,   5, 254, 255, 
-      5,   1,   0,   0, 171,   1, 
-      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, 124,   0, 
+     68,  88,  66,  67,  32, 205, 
+     91, 125,  70,  56, 194, 166, 
+    120,   6,  24, 104,   5, 136, 
+     94, 169,   1,   0,   0,   0, 
+     60,   7,   0,   0,   5,   0, 
+      0,   0,  52,   0,   0,   0, 
+     16,   2,   0,   0, 164,   2, 
+      0,   0,  52,   3,   0,   0, 
+    160,   6,   0,   0,  82,  68, 
+     69,  70, 212,   1,   0,   0, 
+      2,   0,   0,   0, 144,   0, 
+      0,   0,   2,   0,   0,   0, 
+     60,   0,   0,   0,   0,   5, 
+    254, 255,   0,   1,   0,   0, 
+    171,   1,   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, 
+    124,   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, 137,   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, 
-    137,   0,   0,   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, 
+    124,   0,   0,   0,   1,   0, 
+      0,   0, 192,   0,   0,   0, 
+      0,  32,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    137,   0,   0,   0,   2,   0, 
+      0,   0,  36,   1,   0,   0, 
+    128,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    232,   0,   0,   0,   0,   0, 
+      0,   0,   0,  32,   0,   0, 
+      2,   0,   0,   0,   0,   1, 
       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,   1,   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, 124,   0, 
-      0,   0,   1,   0,   0,   0, 
-    192,   0,   0,   0,   0,  32, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 137,   0, 
-      0,   0,   2,   0,   0,   0, 
-     36,   1,   0,   0, 128,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 232,   0, 
+    246,   0,   0,   0, 116,   1, 
       0,   0,   0,   0,   0,   0, 
-      0,  32,   0,   0,   2,   0, 
-      0,   0,   0,   1,   0,   0, 
+     64,   0,   0,   0,   2,   0, 
+      0,   0, 124,   1,   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, 246,   0, 
-      0,   0, 116,   1,   0,   0, 
-      0,   0,   0,   0,  64,   0, 
+      0,   0, 160,   1,   0,   0, 
+     64,   0,   0,   0,  64,   0, 
       0,   0,   2,   0,   0,   0, 
     124,   1,   0,   0,   0,   0, 
       0,   0, 255, 255, 255, 255, 
       0,   0,   0,   0, 255, 255, 
     255, 255,   0,   0,   0,   0, 
-    160,   1,   0,   0,  64,   0, 
-      0,   0,  64,   0,   0,   0, 
-      2,   0,   0,   0, 124,   1, 
+    118, 105, 101, 119,   0, 171, 
+    171, 171,   3,   0,   3,   0, 
+      4,   0,   4,   0,   0,   0, 
       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, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 246,   0, 
+      0,   0, 112, 114, 111, 106, 
+    101,  99, 116, 105, 111, 110, 
+      0,  77, 105,  99, 114, 111, 
+    115, 111, 102, 116,  32,  40, 
+     82,  41,  32,  72,  76,  83, 
+     76,  32,  83, 104,  97, 100, 
+    101, 114,  32,  67, 111, 109, 
+    112, 105, 108, 101, 114,  32, 
+     49,  48,  46,  49,   0, 171, 
+     73,  83,  71,  78, 140,   0, 
+      0,   0,   4,   0,   0,   0, 
+      8,   0,   0,   0, 104,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   7,   0,   0, 113,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   3,   0,   0, 122,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   2,   0,   0,   0, 
+      7,   7,   0,   0, 129,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0, 246,   0,   0,   0, 
-    112, 114, 111, 106, 101,  99, 
-    116, 105, 111, 110,   0,  77, 
-    105,  99, 114, 111, 115, 111, 
-    102, 116,  32,  40,  82,  41, 
-     32,  72,  76,  83,  76,  32, 
-     83, 104,  97, 100, 101, 114, 
-     32,  67, 111, 109, 112, 105, 
-    108, 101, 114,  32,  49,  48, 
-     46,  49,   0, 171,  73,  83, 
-     71,  78, 140,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   3,   0,   0,   0, 
+      1,   1,   0,   0,  80,  79, 
+     83,  73,  84,  73,  79,  78, 
+      0,  84,  69,  88,  67,  79, 
+     79,  82,  68,   0,  78,  79, 
+     82,  77,  65,  76,   0,  75, 
+     78,  79,  67,  72,  69,  78, 
+     95,  73,  68,   0,  79,  83, 
+     71,  78, 136,   0,   0,   0, 
       4,   0,   0,   0,   8,   0, 
       0,   0, 104,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   3,   0,   0,   0, 
-      0,   0,   0,   0,  15,   7, 
+      0,   0,   0,   0,  15,   0, 
       0,   0, 113,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
       0,   0,   3,   0,   0,   0, 
-      1,   0,   0,   0,   3,   3, 
-      0,   0, 122,   0,   0,   0, 
+      1,   0,   0,   0,  15,   0, 
+      0,   0, 125,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   3,   0,   0,   0, 
-      2,   0,   0,   0,   7,   7, 
-      0,   0, 129,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-      3,   0,   0,   0,   1,   1, 
+      2,   0,   0,   0,   3,  12, 
+      0,   0, 125,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      3,   0,   0,   0,   7,   8, 
       0,   0,  80,  79,  83,  73, 
+     84,  73,  79,  78,   0,  83, 
+     86,  95,  80,  79,  83,  73, 
      84,  73,  79,  78,   0,  84, 
      69,  88,  67,  79,  79,  82, 
-     68,   0,  78,  79,  82,  77, 
-     65,  76,   0,  75,  78,  79, 
-     67,  72,  69,  78,  95,  73, 
-     68,   0,  79,  83,  71,  78, 
-    136,   0,   0,   0,   4,   0, 
-      0,   0,   8,   0,   0,   0, 
-    104,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      3,   0,   0,   0,   0,   0, 
-      0,   0,  15,   0,   0,   0, 
-    113,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-      3,   0,   0,   0,   1,   0, 
-      0,   0,  15,   0,   0,   0, 
-    125,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      3,   0,   0,   0,   2,   0, 
-      0,   0,   3,  12,   0,   0, 
-    125,   0,   0,   0,   1,   0, 
-      0,   0,   0,   0,   0,   0, 
-      3,   0,   0,   0,   3,   0, 
-      0,   0,   7,   8,   0,   0, 
-     80,  79,  83,  73,  84,  73, 
-     79,  78,   0,  83,  86,  95, 
-     80,  79,  83,  73,  84,  73, 
-     79,  78,   0,  84,  69,  88, 
-     67,  79,  79,  82,  68,   0, 
-    171, 171,  83,  72,  69,  88, 
-    196,   3,   0,   0,  80,   0, 
-      1,   0, 241,   0,   0,   0, 
-    106, 136,   0,   1,  89,   8, 
+     68,   0, 171, 171,  83,  72, 
+     69,  88, 100,   3,   0,   0, 
+     80,   0,   1,   0, 217,   0, 
+      0,   0, 106,   8,   0,   1, 
+     89,   8,   0,   4,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      0,   2,   0,   0,  89,   0, 
       0,   4,  70, 142,  32,   0, 
-      0,   0,   0,   0,   0,   2, 
-      0,   0,  89,   0,   0,   4, 
-     70, 142,  32,   0,   1,   0, 
-      0,   0,   8,   0,   0,   0, 
-     95,   0,   0,   3, 114,  16, 
-     16,   0,   0,   0,   0,   0, 
-     95,   0,   0,   3,  50,  16, 
-     16,   0,   1,   0,   0,   0, 
-     95,   0,   0,   3, 114,  16, 
+      1,   0,   0,   0,   8,   0, 
+      0,   0,  95,   0,   0,   3, 
+    114,  16,  16,   0,   0,   0, 
+      0,   0,  95,   0,   0,   3, 
+     50,  16,  16,   0,   1,   0, 
+      0,   0,  95,   0,   0,   3, 
+    114,  16,  16,   0,   2,   0, 
+      0,   0,  95,   0,   0,   3, 
+     18,  16,  16,   0,   3,   0, 
+      0,   0, 101,   0,   0,   3, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0, 103,   0,   0,   4, 
+    242,  32,  16,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+    101,   0,   0,   3,  50,  32, 
      16,   0,   2,   0,   0,   0, 
-     95,   0,   0,   3,  18,  16, 
-     16,   0,   3,   0,   0,   0, 
-    101,   0,   0,   3, 242,  32, 
-     16,   0,   0,   0,   0,   0, 
-    103,   0,   0,   4, 242,  32, 
-     16,   0,   1,   0,   0,   0, 
-      1,   0,   0,   0, 101,   0, 
-      0,   3,  50,  32,  16,   0, 
-      2,   0,   0,   0, 101,   0, 
-      0,   3, 114,  32,  16,   0, 
-      3,   0,   0,   0, 104,   0, 
-      0,   2,   5,   0,   0,   0, 
-     38,   0,   0,   8,   0, 208, 
-      0,   0,  18,   0,  16,   0, 
-      0,   0,   0,   0,  10,  16, 
+    101,   0,   0,   3, 114,  32, 
      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, 
-     34,   0,  16,   0,   1,   0, 
+    104,   0,   0,   2,   3,   0, 
+      0,   0,  54,   0,   0,   5, 
+    114,   0,  16,   0,   0,   0, 
       0,   0,  70,  18,  16,   0, 
-      2,   0,   0,   0,  70, 130, 
-     32,   6,   0,   0,   0,   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, 
+      0,   0,   0,   0,  54,   0, 
+      0,   5, 130,   0,  16,   0, 
+      0,   0,   0,   0,   1,  64, 
+      0,   0,   0,   0, 128,  63, 
+     41,   0,   0,   7,  18,   0, 
      16,   0,   1,   0,   0,   0, 
-     70,   2,  16,   0,   1,   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, 
-     70,   2,  16,   0,   1,   0, 
-      0,   0,  54,   0,   0,   5, 
-    130,   0,  16,   0,   1,   0, 
+     10,  16,  16,   0,   3,   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, 
-      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, 
+      2,   0,   0,   0,  17,   0, 
       0,   9,  18,   0,  16,   0, 
-      3,   0,   0,   0,  70,  14, 
-     16,   0,   1,   0,   0,   0, 
+      2,   0,   0,   0,  70,  14, 
+     16,   0,   0,   0,   0,   0, 
      70, 142,  32,   4,   0,   0, 
-      0,   0,  58,   0,  16,   0, 
-      0,   0,   0,   0,  17,   0, 
+      0,   0,  10,   0,  16,   0, 
+      1,   0,   0,   0,  17,   0, 
       0,  10,  34,   0,  16,   0, 
-      3,   0,   0,   0,  70,  14, 
-     16,   0,   1,   0,   0,   0, 
+      2,   0,   0,   0,  70,  14, 
+     16,   0,   0,   0,   0,   0, 
      70, 142,  32,   6,   0,   0, 
       0,   0,   1,   0,   0,   0, 
-     58,   0,  16,   0,   0,   0, 
+     10,   0,  16,   0,   1,   0, 
       0,   0,  17,   0,   0,  10, 
-     66,   0,  16,   0,   3,   0, 
+     66,   0,  16,   0,   2,   0, 
       0,   0,  70,  14,  16,   0, 
-      1,   0,   0,   0,  70, 142, 
+      0,   0,   0,   0,  70, 142, 
      32,   6,   0,   0,   0,   0, 
-      2,   0,   0,   0,  58,   0, 
-     16,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,  10,   0, 
+     16,   0,   1,   0,   0,   0, 
      17,   0,   0,  10, 130,   0, 
-     16,   0,   3,   0,   0,   0, 
-     70,  14,  16,   0,   1,   0, 
+     16,   0,   2,   0,   0,   0, 
+     70,  14,  16,   0,   0,   0, 
       0,   0,  70, 142,  32,   6, 
       0,   0,   0,   0,   3,   0, 
-      0,   0,  58,   0,  16,   0, 
-      0,   0,   0,   0,  17,   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,   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,   1,   0, 
-      0,   0,  17,   0,   0,   8, 
-     66,   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,   0,   0,  17,   0, 
-      0,   8, 130,   0,  16,   0, 
-      1,   0,   0,   0,  70,  14, 
-     16,   0,   3,   0,   0,   0, 
-     70, 142,  32,   0,   1,   0, 
-      0,   0,   3,   0,   0,   0, 
+      0,   0,  10,   0,  16,   0, 
+      1,   0,   0,   0,  54,   0, 
+      0,   5, 242,  32,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   2,   0,   0,   0, 
      17,   0,   0,   8,  18,   0, 
-     16,   0,   4,   0,   0,   0, 
-     70,  14,  16,   0,   1,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   2,   0, 
       0,   0,  70, 142,  32,   0, 
-      1,   0,   0,   0,   4,   0, 
+      1,   0,   0,   0,   0,   0, 
       0,   0,  17,   0,   0,   8, 
-     34,   0,  16,   0,   4,   0, 
+     34,   0,  16,   0,   0,   0, 
       0,   0,  70,  14,  16,   0, 
-      1,   0,   0,   0,  70, 142, 
+      2,   0,   0,   0,  70, 142, 
      32,   0,   1,   0,   0,   0, 
-      5,   0,   0,   0,  17,   0, 
+      1,   0,   0,   0,  17,   0, 
       0,   8,  66,   0,  16,   0, 
-      4,   0,   0,   0,  70,  14, 
-     16,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   2,   0,   0,   0, 
      70, 142,  32,   0,   1,   0, 
-      0,   0,   6,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
      17,   0,   0,   8, 130,   0, 
-     16,   0,   4,   0,   0,   0, 
-     70,  14,  16,   0,   1,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   2,   0, 
       0,   0,  70, 142,  32,   0, 
-      1,   0,   0,   0,   7,   0, 
-      0,   0,  54,   0,   0,   5, 
-    242,  32,  16,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0,  17,   0,   0,   8, 
+     18,  32,  16,   0,   1,   0, 
       0,   0,  70,  14,  16,   0, 
-      3,   0,   0,   0,  54,   0, 
-      0,   5, 242,  32,  16,   0, 
+      0,   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,   4,   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,   0,  16,   0, 
-      2,   0,   0,   0,  62,   0, 
-      0,   1,  83,  84,  65,  84, 
-    148,   0,   0,   0,  28,   0, 
-      0,   0,   5,   0,   0,   0, 
-      0,   0,   0,   0,   8,   0, 
-      0,   0,  18,   0,   0,   0, 
-      2,   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,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   7,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   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,  70,   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,  35,   0,   0,   0, 
-    172,   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, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      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, 
-    254, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 255, 255, 
-    255, 255, 255, 255, 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, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   1,   0, 
       0,   0,   5,   0,   0,   0, 
+     17,   0,   0,   8,  66,  32, 
+     16,   0,   1,   0,   0,   0, 
+     70,  14,  16,   0,   0,   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,  70, 142, 
+     32,   0,   1,   0,   0,   0, 
+      7,   0,   0,   0,  54,   0, 
+      0,   5,  50,  32,  16,   0, 
+      2,   0,   0,   0,  70,  16, 
+     16,   0,   1,   0,   0,   0, 
+     16,   0,   0,   9,  18,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  18,  16,   0,   2,   0, 
+      0,   0,  70, 130,  32,   4, 
+      0,   0,   0,   0,  10,   0, 
+     16,   0,   1,   0,   0,   0, 
+     16,   0,   0,  10,  34,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  18,  16,   0,   2,   0, 
+      0,   0,  70, 130,  32,   6, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  10,   0,  16,   0, 
+      1,   0,   0,   0,  16,   0, 
+      0,  10,  66,   0,  16,   0, 
+      0,   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,   1,   0, 
+      0,   0,  16,   0,   0,   7, 
+    130,   0,  16,   0,   0,   0, 
+      0,   0,  70,   2,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+     68,   0,   0,   5, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+     58,   0,  16,   0,   0,   0, 
+      0,   0,  56,   0,   0,   7, 
+    114,  32,  16,   0,   3,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+     62,   0,   0,   1,  83,  84, 
+     65,  84, 148,   0,   0,   0, 
+     24,   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, 
-      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, 
-      5, 215,  82,  92,   1,   0, 
-      0,   0, 221,  54, 104, 121, 
-     27,  80,  49,  66, 179, 178, 
-     69, 255,  51,  99, 230, 172, 
-      0,   0,   0,   0,   0,   0, 
+      8,   0,   0,   0,  18,   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,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  13,  10,  47, 
-     47,  32,  84,  89,  80,  69, 
-     68,  69,  70,  83,  32,  47, 
-     47,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  13,  10,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  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, 
-    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, 
-    198,  90,   0,   0, 117, 131, 
-      1,   0,  76, 232,   3,   0, 
-    251, 168,   1,   0, 146, 183, 
-      2,   0,  28,  19,   2,   0, 
-    242,  56,   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, 
-      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,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   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,  32,  98,  48,  32,  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, 
-     32,  49,  50,  56,  32,  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,  32,  98, 
-     49,  32,  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,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  13, 
-     10,  47,  47,  32,  84,  89, 
-     80,  69,  68,  69,  70,  83, 
-     32,  47,  47,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  13, 
-     10,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  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, 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, 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,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  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,  32,  86, 101, 114, 116, 
-    101, 120,  73, 110, 112, 117, 
-    116,  84, 121, 112, 101,  32, 
-    105, 110, 112, 117, 116,  32, 
-     41,  13,  10, 123,  13,  10, 
-     32,  32,  32,  32,  47,  47, 
-    114, 101, 116, 117, 114, 110, 
-     32, 105, 110, 112, 117, 116, 
-     59,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  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,  32,  61,  32, 
-    110, 111, 114, 109,  97, 108, 
-    105, 122, 101,  40,  32, 109, 
-    117, 108,  40,  32, 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, 
-     32, 105, 110, 112, 117, 116, 
-     46, 107, 110, 111,  99, 104, 
-    101, 110,  32,  93,  32,  41, 
-     32,  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,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  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,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  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,  32, 112, 
-    114, 111, 106, 101,  99, 116, 
-    105, 111, 110,  32, 109,  97, 
-    116, 114, 105,  99, 101, 115, 
-     46,  32,  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, 
-     32, 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,  32, 105, 110, 112, 117, 
-    116,  46, 107, 110, 111,  99, 
-    104, 101, 110,  32,  93,  32, 
-     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, 
-     32, 111, 117, 116, 112, 117, 
-    116,  46, 119, 111, 114, 108, 
-    100,  80, 111, 115,  44,  32, 
-    118, 105, 101, 119,  32,  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,  32, 
-    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,  32,  41,  59, 
-     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, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0, 254, 239, 
-    254, 239,   1,   0,   0,   0, 
-     50,   8,   0,   0,   0,  67, 
-     58,  92,  85, 115, 101, 114, 
-    115,  92, 107, 111, 108, 106, 
-     97,  92,  79, 110, 101,  68, 
-    114, 105, 118, 101,  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,  65, 108, 108, 103, 
-    101, 109, 101, 105, 110,  92, 
-     70, 114,  97, 109, 101, 119, 
-    111, 114, 107,  92,  85,  73, 
-     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, 111, 110, 
-    101, 100, 114, 105, 118, 101, 
-     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,  97, 108, 
-    108, 103, 101, 109, 101, 105, 
-    110,  92, 102, 114,  97, 109, 
-    101, 119, 111, 114, 107,  92, 
-    117, 105, 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,  32,  98,  48,  32,  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, 
-     32,  49,  50,  56,  32,  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,  32,  98, 
-     49,  32,  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,  47,  47,  47,  47,  47, 
-     47,  47,  47,  47,  47,  47, 
-     47,  47,  47,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     27, 226,  48,   1, 128,   0, 
-      0,   0, 118,   7, 216,  51, 
-     85, 185, 212,   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,   2,   0, 
-      0,   0,   0,   0,   0,   0, 
-     93,   0,   0,   0,  40,   0, 
-      0,   0,  27, 226,  48,   1, 
-    155, 234,  65, 223, 121,   7, 
-      0,   0,   1,   0,   0,   0, 
-     92,   0,   0,   0,  93,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   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,  15,   0, 171,  63, 
-     10,   0,   1,   0,  15,   0, 
-    171,  63,  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, 
-     76,   5,   0,   0,   0,   0, 
-      0,   0,  44,   3,   0,   0, 
-      0,   0,   0,   0,  44,   3, 
-      0,   0,   9,  16,   0,   0, 
-    152,   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, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-      0,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-      4,   0,   4,   0, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-      4,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-      8,   0,   4,   0, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-      8,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     12,   0,   4,   0, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-     12,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     16,   0,   4,   0, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-     16,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     20,   0,   4,   0, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-     20,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     24,   0,   4,   0, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-     32,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     28,   0,   4,   0, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-     36,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     32,   0,   4,   0, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-     40,   0,   0,   0,  22,   0, 
-     80,  17,   1,   0,   5,   0, 
-     36,   0,   4,   0, 152,   0, 
-      0,   0,   1,   0,  44,   3, 
-     48,   0,   0,   0,  22,   0, 
-     80,  17,   0,   0,   5,   0, 
-     12,   0,   4,   0, 140,   1, 
-      0,   0,   1,   0, 100,   1, 
-     28,   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,  40,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  48,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  44,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  52,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  48,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  56,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  32,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  32,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  36,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  36,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  16,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  16,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  20,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  20,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  24,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  24,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  28,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  28,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,   0,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,   0,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,   4,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,   4,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,   8,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,   8,   0, 
-      0,   0,  22,   0,  80,  17, 
-      2,   0,   5,   0,  12,   0, 
-      4,   0, 152,   0,   0,   0, 
-      1,   0,  44,   3,  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, 120,   1,   0,   0, 
-      1,   0,  76,   2,   0,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  44,   0, 
-      4,   0, 120,   1,   0,   0, 
-      1,   0,  76,   2,   4,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  48,   0, 
-      4,   0, 120,   1,   0,   0, 
-      1,   0,  76,   2,   8,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  32,   0, 
-      4,   0, 160,   1,   0,   0, 
-      1,   0,  36,   2,  32,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  36,   0, 
-      4,   0, 160,   1,   0,   0, 
-      1,   0,  36,   2,  36,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   0,   0, 
-      4,   0, 248,   1,   0,   0, 
-      1,   0, 204,   1,  48,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   4,   0, 
-      4,   0,  32,   2,   0,   0, 
-      1,   0, 164,   1,  52,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,   8,   0, 
-      4,   0,  72,   2,   0,   0, 
-      1,   0, 124,   1,  56,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  12,   0, 
-      4,   0, 112,   2,   0,   0, 
-      1,   0,  84,   1,  60,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  16,   0, 
-      4,   0, 144,   2,   0,   0, 
-      1,   0, 128,   0,  16,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  20,   0, 
-      4,   0, 176,   2,   0,   0, 
-      1,   0, 128,   0,  20,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  24,   0, 
-      4,   0, 208,   2,   0,   0, 
-      1,   0, 128,   0,  24,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  28,   0, 
-      4,   0, 240,   2,   0,   0, 
-      1,   0, 128,   0,  28,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  16,   0, 
-      4,   0,  16,   3,   0,   0, 
-      1,   0, 180,   0,  64,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  20,   0, 
-      4,   0,  48,   3,   0,   0, 
-      1,   0, 148,   0,  68,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  24,   0, 
-      4,   0,  80,   3,   0,   0, 
-      1,   0, 116,   0,  72,   0, 
-      0,   0,  22,   0,  80,  17, 
-      0,   0,   5,   0,  28,   0, 
-      4,   0, 112,   3,   0,   0, 
-      1,   0,  84,   0,  76,   0, 
-      0,   0,   2,   0,   6,   0, 
-    244,   0,   0,   0,  24,   0, 
-      0,   0,   1,   0,   0,   0, 
-     16,   1, 179,  13,  72, 160, 
-    162, 195,  89, 194, 190,  27, 
-    114, 125, 118, 227, 205, 203, 
-      0,   0, 242,   0,   0,   0, 
-    184,   2,   0,   0,   0,   0, 
-      0,   0,   1,   0,   1,   0, 
-    196,   3,   0,   0,   0,   0, 
-      0,   0,  56,   0,   0,   0, 
-    172,   2,   0,   0, 152,   0, 
-      0,   0,  42,   0,   0, 128, 
-    152,   0,   0,   0,  42,   0, 
-      0,   0, 184,   0,   0,   0, 
-     42,   0,   0, 128, 184,   0, 
-      0,   0,  42,   0,   0,   0, 
-    220,   0,   0,   0,  42,   0, 
-      0, 128, 220,   0,   0,   0, 
-     42,   0,   0,   0,   4,   1, 
-      0,   0,  42,   0,   0, 128, 
-      4,   1,   0,   0,  42,   0, 
-      0,   0,  44,   1,   0,   0, 
-     42,   0,   0, 128,  44,   1, 
-      0,   0,  42,   0,   0,   0, 
-     72,   1,   0,   0,  42,   0, 
-      0, 128,  72,   1,   0,   0, 
-     42,   0,   0,   0,  92,   1, 
-      0,   0,  42,   0,   0, 128, 
-     92,   1,   0,   0,  42,   0, 
-      0,   0, 120,   1,   0,   0, 
-     45,   0,   0, 128, 120,   1, 
-      0,   0,  45,   0,   0,   0, 
-    140,   1,   0,   0,  48,   0, 
-      0, 128, 140,   1,   0,   0, 
-     48,   0,   0,   0, 160,   1, 
-      0,   0,  51,   0,   0, 128, 
-    160,   1,   0,   0,  51,   0, 
-      0,   0, 192,   1,   0,   0, 
-     51,   0,   0, 128, 192,   1, 
-      0,   0,  51,   0,   0,   0, 
-    212,   1,   0,   0,  51,   0, 
-      0, 128, 212,   1,   0,   0, 
-     51,   0,   0,   0, 248,   1, 
-      0,   0,  51,   0,   0, 128, 
-    248,   1,   0,   0,  51,   0, 
-      0,   0,  32,   2,   0,   0, 
-     51,   0,   0, 128,  32,   2, 
-      0,   0,  51,   0,   0,   0, 
-     72,   2,   0,   0,  51,   0, 
-      0, 128,  72,   2,   0,   0, 
-     51,   0,   0,   0, 112,   2, 
-      0,   0,  52,   0,   0, 128, 
-    112,   2,   0,   0,  52,   0, 
-      0,   0, 144,   2,   0,   0, 
-     52,   0,   0, 128, 144,   2, 
-      0,   0,  52,   0,   0,   0, 
-    176,   2,   0,   0,  52,   0, 
-      0, 128, 176,   2,   0,   0, 
-     52,   0,   0,   0, 208,   2, 
-      0,   0,  52,   0,   0, 128, 
-    208,   2,   0,   0,  52,   0, 
-      0,   0, 240,   2,   0,   0, 
-     53,   0,   0, 128, 240,   2, 
-      0,   0,  53,   0,   0,   0, 
-     16,   3,   0,   0,  53,   0, 
-      0, 128,  16,   3,   0,   0, 
-     53,   0,   0,   0,  48,   3, 
-      0,   0,  53,   0,   0, 128, 
-     48,   3,   0,   0,  53,   0, 
-      0,   0,  80,   3,   0,   0, 
-     53,   0,   0, 128,  80,   3, 
-      0,   0,  53,   0,   0,   0, 
-    112,   3,   0,   0,  55,   0, 
-      0, 128, 112,   3,   0,   0, 
-     55,   0,   0,   0, 132,   3, 
-      0,   0,  55,   0,   0, 128, 
-    132,   3,   0,   0,  55,   0, 
-      0,   0, 152,   3,   0,   0, 
-     55,   0,   0, 128, 152,   3, 
-      0,   0,  55,   0,   0,   0, 
-    172,   3,   0,   0,  55,   0, 
-      0, 128, 172,   3,   0,   0, 
-     55,   0,   0,   0, 192,   3, 
-      0,   0,  55,   0,   0, 128, 
-    192,   3,   0,   0,  55,   0, 
-      0,   0,   5,   0,  95,   0, 
-     61,   0,  90,   0,   5,   0, 
-     95,   0,  32,   0,  92,   0, 
-      5,   0,  95,   0,  32,   0, 
-     92,   0,   5,   0,  95,   0, 
-     32,   0,  92,   0,   5,   0, 
-     95,   0,  21,   0,  94,   0, 
-      5,   0,  95,   0,  21,   0, 
-     94,   0,   5,   0,  95,   0, 
-     21,   0,  94,   0,   5,   0, 
-     28,   0,   5,   0,  27,   0, 
-      5,   0,  27,   0,   5,   0, 
-     26,   0,   5,   0,  76,   0, 
-     44,   0,  73,   0,   5,   0, 
-     76,   0,  23,   0,  75,   0, 
-      5,   0,  76,   0,  23,   0, 
-     75,   0,   5,   0,  76,   0, 
-     23,   0,  75,   0,   5,   0, 
-     76,   0,  23,   0,  75,   0, 
-      5,   0,  76,   0,  23,   0, 
-     75,   0,   5,   0,  51,   0, 
-     23,   0,  50,   0,   5,   0, 
-     51,   0,  23,   0,  50,   0, 
-      5,   0,  51,   0,  23,   0, 
-     50,   0,   5,   0,  51,   0, 
-     23,   0,  50,   0,   5,   0, 
-     57,   0,  23,   0,  56,   0, 
-      5,   0,  57,   0,  23,   0, 
-     56,   0,   5,   0,  57,   0, 
-     23,   0,  56,   0,   5,   0, 
-     57,   0,  23,   0,  56,   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,  16,   0, 
-      0,   0,   0,   0,   0,   0, 
-     36,   0,   0,   0,  72,   0, 
-      0,   0, 100,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      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, 
-     15,  16,   0,   0, 184,   1, 
-      0,   0,  10,   0, 255, 255, 
-      4,   0,   0,   0, 255, 255, 
-      3,   0,   0,   0,   0,   0, 
-     60,   0,   0,   0,  60,   0, 
-      0,   0,   8,   0,   0,   0, 
-     68,   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,  78,   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,  38,   0, 
-      5,  21,   4,   0,   0,   0, 
-      3,  16,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     40,   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,  78,   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,  38,   0, 
-      5,  21,   4,   0,   0,   0, 
-      6,  16,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     52,   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, 
-      1,   0,   0,   2,  10,   0, 
-     24,  21,  11,  16,   0,   0, 
-      1,   0,   0,   2,   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,   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, 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, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  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,  32,  86, 101, 
-    114, 116, 101, 120,  73, 110, 
-    112, 117, 116,  84, 121, 112, 
-    101,  32, 105, 110, 112, 117, 
-    116,  32,  41,  13,  10, 123, 
-     13,  10,  32,  32,  32,  32, 
-     47,  47, 114, 101, 116, 117, 
-    114, 110,  32, 105, 110, 112, 
-    117, 116,  59,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     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,  32, 
-     61,  32, 110, 111, 114, 109, 
-     97, 108, 105, 122, 101,  40, 
-     32, 109, 117, 108,  40,  32, 
-    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,  32, 105, 110, 112, 
-    117, 116,  46, 107, 110, 111, 
-     99, 104, 101, 110,  32,  93, 
-     32,  41,  32,  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,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  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,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  32,  32,  32, 
-     32,  32,  32,  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, 
-     32, 112, 114, 111, 106, 101, 
-     99, 116, 105, 111, 110,  32, 
-    109,  97, 116, 114, 105,  99, 
-    101, 115,  46,  32,  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,  32, 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,  32, 105, 110, 
-    112, 117, 116,  46, 107, 110, 
-    111,  99, 104, 101, 110,  32, 
-     93,  32,  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,  32, 111, 117, 116, 
-    112, 117, 116,  46, 119, 111, 
-    114, 108, 100,  80, 111, 115, 
-     44,  32, 118, 105, 101, 119, 
-     32,  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,  32, 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,  32, 
-     41,  59,  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, 
-     92,   0,   0,   0,  93,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0, 184,   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,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   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, 
-    196,   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,  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,  32,   0,   0,   0, 
-     20,   2,   0,   0,   1,   0, 
-      0,   0,   1,   0,   0,   0, 
-     73,   0,   0,   0,   1,   0, 
-      0,   0,  37,   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,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   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,   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,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   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,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      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, 255, 255, 255, 255, 
-    119,   9,  49,   1,   1,   0, 
-      0,   0,  13,   0,  10, 140, 
-     14,   0, 180, 156,  15,   0, 
-     11,   0,  92,   0,   0,   0, 
-     32,   0,   0,   0,  44,   0, 
-      0,   0, 104,   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, 
-    196,   3,   0,   0,  32,   0, 
-      0,  96,   0,   0, 230, 172, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   2,   0,   9,   0, 
-     80,   5,   0,   0,   0,   0, 
-      0,   0, 236,   2,   0,   0, 
-      1,   0,   0,   0, 144, 120, 
-    192,   3,   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, 196,   3,   0,   0, 
-     32,   0,   0,  96,   0,   0, 
-    230, 172,   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, 
-    196,   3,   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,  79, 110, 101, 
-     68, 114, 105, 118, 101,  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,  65, 108, 108, 
-    103, 101, 109, 101, 105, 110, 
-     92,  70, 114,  97, 109, 101, 
-    119, 111, 114, 107,  92,  85, 
-     73,  86, 101, 114, 116, 101, 
-    120,  83, 104,  97, 100, 101, 
-    114,  46, 104, 108, 115, 108, 
-      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, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   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,   5, 215,  82,  92, 
-      1,   0,   0,   0, 221,  54, 
-    104, 121,  27,  80,  49,  66, 
-    179, 178,  69, 255,  51,  99, 
-    230, 172, 136,   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, 
-    111, 110, 101, 100, 114, 105, 
-    118, 101,  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, 
-     97, 108, 108, 103, 101, 109, 
-    101, 105, 110,  92, 102, 114, 
-     97, 109, 101, 119, 111, 114, 
-    107,  92, 117, 105, 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,  58,   0, 
-      0,   0,   0,   0,   0,   0, 
-     17,   0,   0,   0,   7,   0, 
-      0,   0,  10,   0,   0,   0, 
-      6,   0,   0,   0,   0,   0, 
-      0,   0,   5,   0,   0,   0, 
-     34,   0,   0,   0,   8,   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, 
-     16,   0,   0,   0,  32,   0, 
-      0,   0, 228,   0,   0,   0, 
-    240,   1,   0,   0, 127,   1, 
-      0,   0,  56,   0,   0,   0, 
-      0,   0,   0,   0,  98,   8, 
-      0,   0, 128,   0,   0,   0, 
-    121,   7,   0,   0,  80,   8, 
-      0,   0,  68,   0,   0,   0, 
-      0,   0,   0,   0,  40,   0, 
-      0,   0,  68,   2,   0,   0, 
-     44,   0,   0,   0, 132,   0, 
-      0,   0,   3,   0,   0,   0, 
-     30,   0,   0,   0,  19,   0, 
-      0,   0,  29,   0,   0,   0, 
-     20,   0,   0,   0,  12,   0, 
-      0,   0,   6,   0,   0,   0, 
-     21,   0,   0,   0,  22,   0, 
-      0,   0,  23,   0,   0,   0, 
-     13,   0,   0,   0,   8,   0, 
-      0,   0,   9,   0,   0,   0, 
-     10,   0,   0,   0,  11,   0, 
-      0,   0,  14,   0,   0,   0, 
-     15,   0,   0,   0,  16,   0, 
-      0,   0,  17,   0,   0,   0, 
-     18,   0,   0,   0,   7,   0, 
-      0,   0,  24,   0,   0,   0, 
-     25,   0,   0,   0,  26,   0, 
-      0,   0,  28,   0,   0,   0, 
-     27,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,  31,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -3421,6 +387,7 @@ const BYTE UIVertexShader[] =
       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, 
@@ -3432,5 +399,5 @@ const BYTE UIVertexShader[] =
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0
+      0,   0,   0,   0
 };

+ 30 - 225
Welt3D.cpp

@@ -1,9 +1,7 @@
 #include "Welt3D.h"
 #include "Zeichnung3D.h"
 #include "MausEreignis.h"
-#ifdef WIN32
-#include "Render3D.h"
-#endif
+#include "Model3D.h"
 
 using namespace Framework;
 
@@ -11,136 +9,50 @@ using namespace Framework;
 // Konstructor
 Welt3D::Welt3D()
 {
-    arraySize = 100;
-    arraySizeAlpha = 100;
-    members = new Zeichnung3D*[ arraySize ];
-    membersAlpha = new Zeichnung3D*[ arraySizeAlpha ];
-    distSq = new float[ arraySizeAlpha + arraySize ];
-    distSqSort = new float[ arraySizeAlpha + arraySize ];
-    alphaVS = new Zeichnung3D*[ arraySizeAlpha + arraySize ];
-    elementsSort = new Zeichnung3D*[ arraySizeAlpha + arraySize ];
-    for( int i = 0; i < arraySize; i++ )
-        members[ i ] = 0;
-    for( int i = 0; i < arraySizeAlpha; i++ )
-        membersAlpha[ i ] = 0;
+    members = new RCArray< Model3D >();
     ref = 1;
     rend = 0;
-    upd = 1;
 }
 
 // Destruktor
 Welt3D::~Welt3D()
 {
-    for( int i = 0; i < arraySize; i++ )
-    {
-        if( members[ i ] )
-            members[ i ]->release();
-    }
-    delete[] members;
-    for( int i = 0; i < arraySizeAlpha; i++ )
-    {
-        if( membersAlpha[ i ] )
-            membersAlpha[ i ]->release();
-    }
-    delete[] membersAlpha;
-    delete[] distSq;
-    delete[] distSqSort;
-    delete[] alphaVS;
-    delete[] elementsSort;
+    members->release();
+}
+
+// Blockiert den zugriff auf das Objekt und wartet gegebenfalls auf den Zugriff
+void Welt3D::lock()
+{
+    cs.lock();
+}
+
+// Gibt das Objekt für andere Threads frei
+void Welt3D::unlock()
+{
+    cs.unlock();
 }
 
 // Fügt der Welt ein Objekt hinzu
 //  obj: Das Objekt, was hinzugefügt werden soll
-void Welt3D::addZeichnung( Zeichnung3D *obj )
+void Welt3D::addZeichnung( Model3D *obj )
 {
     cs.lock();
-    Zeichnung3D **tmp = members;
-    int max = arraySize;
-    if( obj->hatAlpha() )
-    {
-        tmp = membersAlpha;
-        max = arraySizeAlpha;
-    }
-    for( int i = 0; i < max; i++ )
-    {
-        if( !*tmp )
-        {
-            *tmp = obj;
-            cs.unlock();
-            return;
-        }
-        tmp++;
-    }
+    members->add( obj );
     rend = 1;
-    if( obj->hatAlpha() )
-    {
-        arraySizeAlpha += 100;
-        Zeichnung3D **nm = new Zeichnung3D*[ arraySizeAlpha ];
-        memcpy( nm, membersAlpha, sizeof( Zeichnung3D * ) * ( arraySizeAlpha - 100 ) );
-        memset( &nm[ arraySizeAlpha - 100 ], 0, sizeof( Zeichnung3D * ) * 100 );
-        delete[] membersAlpha;
-        membersAlpha = nm;
-        membersAlpha[ arraySizeAlpha - 100 ] = obj;
-        delete[] distSq;
-        delete[] distSqSort;
-        delete[] alphaVS;
-        delete[] elementsSort;
-        distSq = new float[ arraySizeAlpha + arraySize ];
-        distSqSort = new float[ arraySizeAlpha + arraySize ];
-        alphaVS = new Zeichnung3D*[ arraySizeAlpha + arraySize ];
-        elementsSort = new Zeichnung3D*[ arraySizeAlpha + arraySize ];
-        cs.unlock();
-        return;
-    }
-    arraySize += 100;
-    Zeichnung3D **nm = new Zeichnung3D*[ arraySize ];
-    memcpy( nm, members, sizeof( Zeichnung3D * ) * ( arraySize - 100 ) );
-    memset( &nm[ arraySize - 100 ], 0, sizeof( Zeichnung3D * ) * 100 );
-    delete[] members;
-    members = nm;
-    members[ arraySize - 100 ] = obj;
-    delete[] distSq;
-    delete[] distSqSort;
-    delete[] alphaVS;
-    delete[] elementsSort;
-    distSq = new float[ arraySizeAlpha + arraySize ];
-    distSqSort = new float[ arraySizeAlpha + arraySize ];
-    alphaVS = new Zeichnung3D*[ arraySizeAlpha + arraySize ];
-    elementsSort = new Zeichnung3D*[ arraySizeAlpha + arraySize ];
     cs.unlock();
 }
 
 // Entfernt ein Objekt aus der Welt
 //  obj: Das Objekt, das entwernt werden soll
-void Welt3D::removeZeichnung( Zeichnung3D *obj )
+void Welt3D::removeZeichnung( Model3D *obj )
 {
     cs.lock();
-    int index = 0;
-    if( !obj->hatAlpha() )
-    {
-        for( Zeichnung3D **i = members; index < arraySize; i++, index++ )
-        {
-            if( *i == obj )
-            {
-                ( *i )->release();
-                *i = 0;
-                rend = 1;
-                cs.unlock();
-                return;
-            }
-        }
-        cs.unlock();
-        return;
-    }
-    for( Zeichnung3D **i = membersAlpha; index < arraySizeAlpha; i++, index++ )
+    for( int i = 0; i < members->getEintragAnzahl(); i++ )
     {
-        if( *i == obj )
+        if( members->z( i ) == obj )
         {
-            ( *i )->release();
-            *i = 0;
-            rend = 1;
-            cs.unlock();
-            return;
+            members->remove( i );
+            break;
         }
     }
     cs.unlock();
@@ -205,126 +117,19 @@ void Welt3D::doMausEreignis( MausEreignis3D &me )
 //  return: true, wenn sich das Objekt verändert hat, false sonnst.
 bool Welt3D::tick( double tickval )
 {
-    if( !upd )
-        return rend;
-    rend = 0;
-    upd = 0;
-    int index = 0;
     cs.lock();
-    for( Zeichnung3D **i = members; index < arraySize; i++, index++ )
-    {
-        if( *i && ( *i )->hatAlpha() )
-        {
-            addZeichnung( *i );
-            *i = 0;
-            continue;
-        }
-        rend |= *i ? ( *i )->tick( tickval ) : 0;
-    }
-    index = 0;
-    for( Zeichnung3D **i = membersAlpha; index < arraySizeAlpha; i++, index++ )
-    {
-        rend |= *i ? ( *i )->tick( tickval ) : 0;
-        if( *i && !( *i )->hatAlpha() )
-        {
-            addZeichnung( *i );
-            *i = 0;
-            continue;
-        }
-    }
+    for( auto m = members->getIterator(); m; m++ )
+        rend |= m->tick( tickval );
     cs.unlock();
-    return rend;
+    bool tmp = rend;
+    rend = 0;
+    return tmp;
 }
 
-// Zeichnet einen ausschnitt der Welt
-//  zRObj: Enthällt alle Werkzeuge, die zum Zeichnen verwendet werden
-void Welt3D::render( Render3D *zRObj )
+// Gibt einen Iterator zurück, mit dem alle Members aufgezählt werden können
+Iterator< Model3D * > Welt3D::getMembers()
 {
-#ifdef WIN32
-    upd = 1;
-    cs.lock();
-    int index = 0;
-    for( Zeichnung3D **i = members; index < arraySize; i++, index++ )
-    {
-        if( *i && zRObj->isInFrustrum( ( *i )->getPos(), ( *i )->getRadius() ) )
-            ( *i )->render( zRObj );
-    }
-    index = 0;
-    int index2 = 0;
-    for( Zeichnung3D **i = membersAlpha; index < arraySizeAlpha; i++, index++ )
-    {
-        if( *i && zRObj->isInFrustrum( ( *i )->getPos(), ( *i )->getRadius(), &distSq[ index2 ] ) )
-        {
-            alphaVS[ index2 ] = *i;
-            elementsSort[ index2 ] = *i;
-            distSqSort[ index2 ] = distSq[ index2 ];
-            index2++;
-        }
-    }
-    int K;
-    int L = 1;
-    while( L < index2 )
-    {
-        K = 0;
-        while( K + 2 * L - 1 < index2 )
-        {
-            //merge
-            int I = K;
-            int J = K + L;
-            int N = K;
-            while( I < K + L || J < K + 2 * L )
-            {
-                if( J == K + 2 * L || ( I < K + L && distSq[ I ] < distSq[ J ] ) )
-                {
-                    distSqSort[ N ] = distSq[ I ];
-                    elementsSort[ N ] = alphaVS[ I ];
-                    I++;
-                }
-                else
-                {
-                    distSqSort[ N ] = distSq[ J ];
-                    elementsSort[ N ] = alphaVS[ J ];
-                    J++;
-                }
-                N++;
-            }
-            K += 2 * L;
-        }
-        if( K + L - 1 < index2 - 1 )
-        {
-            //merge
-            int I = K;
-            int J = K + L;
-            int N = K;
-            while( I < K + L || J < index2 - 1 )
-            {
-                if( J == index2 || ( I < K + L && distSq[ I ] < distSq[ J ] ) )
-                {
-                    distSqSort[ N ] = distSqSort[ I ];
-                    elementsSort[ N ] = alphaVS[ I ];
-                    I++;
-                }
-                else
-                {
-                    distSqSort[ N ] = distSq[ J ];
-                    elementsSort[ N ] = alphaVS[ J ];
-                    J++;
-                }
-                N++;
-            }
-        }
-        float *tmpF = distSq;
-        distSq = distSqSort;
-        distSqSort = tmpF;
-        Zeichnung3D **tmpZ = alphaVS;
-        alphaVS = elementsSort;
-        elementsSort = tmpZ;
-        L *= 2;
-    }
-    for( int i = index2 - 1; i >= 0; i-- )
-        alphaVS[ i ]->render( zRObj );
-    cs.unlock();
-#endif
+    return members->getIterator();
 }
 
 // Erhöht den Reference Counting Zähler.

+ 11 - 14
Welt3D.h

@@ -1,27 +1,21 @@
 #pragma once
 
 #include "Critical.h"
+#include "Array.h"
 
 namespace Framework
 {
     class Zeichnung3D; // Zeichnung.h
     class Render3D; // Render3D.h
     struct MausEreignis3D; // MausEreignis.h
+    class Model3D;
 
     // Speichert alle 3D Zeichnungen einer Szene ab
     class Welt3D
     {
     private:
-        Zeichnung3D **members;
-        Zeichnung3D **membersAlpha;
-        float *distSq;
-        float *distSqSort;
-        Zeichnung3D **alphaVS;
-        Zeichnung3D **elementsSort;
-        int arraySize;
-        int arraySizeAlpha;
+        RCArray< Model3D > *members;
         bool rend;
-        bool upd;
         Critical cs;
         int ref;
 
@@ -30,12 +24,16 @@ namespace Framework
         __declspec( dllexport ) Welt3D();
         // Destruktor
         __declspec( dllexport ) virtual ~Welt3D();
+        // Blockiert den zugriff auf das Objekt und wartet gegebenfalls auf den Zugriff
+        __declspec( dllexport ) void lock();
+        // Gibt das Objekt für andere Threads frei
+        __declspec( dllexport ) void unlock();
         // Fügt der Welt ein Objekt hinzu
         //  obj: Das Objekt, was hinzugefügt werden soll
-        __declspec( dllexport ) void addZeichnung( Zeichnung3D *obj );
+        __declspec( dllexport ) void addZeichnung( Model3D *obj );
         // Entfernt ein Objekt aus der Welt
         //  obj: Das Objekt, das entwernt werden soll (ohne erhöhten reference Counter)
-        __declspec( dllexport ) void removeZeichnung( Zeichnung3D *zObj );
+        __declspec( dllexport ) void removeZeichnung( Model3D *zObj );
         // Verarbeitet ein Mausereignis
         //  me: Das Mausereignis, das verarbeitet werden soll
         __declspec( dllexport ) void doMausEreignis( MausEreignis3D &me );
@@ -43,9 +41,8 @@ namespace Framework
         //  tickval: Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
         //  return: true, wenn sich das Objekt verändert hat, false sonnst.
         __declspec( dllexport ) virtual bool tick( double tickval );
-        // Zeichnet einen ausschnitt der Welt
-        //  zRObj: Enthällt alle Werkzeuge, die zum Zeichnen verwendet werden
-        __declspec( dllexport ) void render( Render3D *zRObj );
+        // Gibt einen Iterator zurück, mit dem alle Members aufgezählt werden können
+        __declspec( dllexport ) Iterator< Model3D * > getMembers();
         // Erhöht den Reference Counting Zähler.
         //  return: this.
         __declspec( dllexport ) Welt3D *getThis();

+ 0 - 5
Zeichnung3D.cpp

@@ -148,11 +148,6 @@ bool Zeichnung3D::tick( double tickval )
     return 0;
 }
 
-// Zeichnet das Objekt
-//  zRObj: Ein Zeiger auf das Objekt, das zum Zeichnen verwendet werden soll (ohne erhöhten Reference Counter)
-void Zeichnung3D::render( Render3D *zRObj )
-{}
-
 // Gibt zurück, ob das Objekt teilweise oder ganz transparente stellen enthält
 bool Zeichnung3D::hatAlpha() const
 {

+ 0 - 3
Zeichnung3D.h

@@ -76,9 +76,6 @@ namespace Framework
         //  tickval: Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
         //  return: true, wenn sich das Objekt verändert hat, false sonnst.
         __declspec( dllexport ) virtual bool tick( double tickval );
-        // Zeichnet das Objekt
-        //  zRObj: Ein Zeiger auf das Objekt, das zum Zeichnen verwendet werden soll (ohne erhöhten Reference Counter)
-        __declspec( dllexport ) virtual void render( Render3D *zRObj );
         // Gibt zurück, ob das Objekt teilweise oder ganz transparente stellen enthält
         __declspec( dllexport ) bool hatAlpha() const;
         // Gibt den radius einer Kugel zurück, die das gesammte Model umschließt