diff --git a/enginecustom/Light.ps b/enginecustom/Light.ps index ebf43d7..7941e19 100644 --- a/enginecustom/Light.ps +++ b/enginecustom/Light.ps @@ -2,6 +2,10 @@ // Filename: light.ps //////////////////////////////////////////////////////////////////////////////// +///////////// +// DEFINES // +///////////// +#define NUM_LIGHTS 4 ///////////// // GLOBALS // @@ -11,13 +15,17 @@ SamplerState SampleType : register(s0); cbuffer LightBuffer { float4 ambientColor; - float4 diffuseColor; float3 lightDirection; float padding; float specularPower; float4 specularColor; }; +cbuffer LightColorBuffer +{ + float4 diffuseColor[NUM_LIGHTS]; +}; + ////////////// // TYPEDEFS // @@ -27,7 +35,7 @@ struct PixelInputType float4 position : SV_POSITION; float2 tex : TEXCOORD0; float3 normal : NORMAL; - float3 viewDirection : TEXCOORD1; + float3 lightPos[NUM_LIGHTS] : TEXCOORD1; }; @@ -38,48 +46,39 @@ float4 LightPixelShader(PixelInputType input) : SV_TARGET { float4 textureColor; float3 lightDir; - float lightIntensity; float4 color; float3 reflection; float4 specular; - + float lightIntensity[NUM_LIGHTS]; + float4 colorArray[NUM_LIGHTS]; + float4 colorSum; + int i; // Sample the pixel color from the texture using the sampler at this texture coordinate location. textureColor = shaderTexture.Sample(SampleType, input.tex); - // Set the default output color to the ambient light value for all pixels. - color = ambientColor; - - // Initialize the specular color. - specular = float4(0.0f, 0.0f, 0.0f, 0.0f); - - - // Invert the light direction for calculations. - lightDir = -lightDirection; - - // Calculate the amount of light on this pixel. - lightIntensity = saturate(dot(input.normal, lightDir)); - - if(lightIntensity > 0.0f) + for(i=0; iCreateBuffer(&lightColorBufferDesc, NULL, &m_lightColorBuffer); + if (FAILED(result)) + { + return false; + } + + // Setup the description of the dynamic constant buffer that is in the vertex shader. + lightPositionBufferDesc.Usage = D3D11_USAGE_DYNAMIC; + lightPositionBufferDesc.ByteWidth = sizeof(LightPositionBufferType); + lightPositionBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + lightPositionBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + lightPositionBufferDesc.MiscFlags = 0; + lightPositionBufferDesc.StructureByteStride = 0; // Create the constant buffer pointer so we can access the vertex shader constant buffer from within this class. - result = device->CreateBuffer(&lightBufferDesc, NULL, &m_lightBuffer); + result = device->CreateBuffer(&lightPositionBufferDesc, NULL, &m_lightPositionBuffer); if (FAILED(result)) { return false; @@ -274,6 +291,19 @@ bool LightShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* void LightShaderClass::ShutdownShader() { + // Release the light constant buffers. + if (m_lightColorBuffer) + { + m_lightColorBuffer->Release(); + m_lightColorBuffer = 0; + } + + if (m_lightPositionBuffer) + { + m_lightPositionBuffer->Release(); + m_lightPositionBuffer = 0; + } + // Release the light constant buffer. if (m_lightBuffer) { @@ -364,15 +394,14 @@ void LightShaderClass::OutputShaderErrorMessage(ID3D10Blob* errorMessage, HWND h bool LightShaderClass::SetShaderParameters(ID3D11DeviceContext* deviceContext, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, - ID3D11ShaderResourceView* texture, XMFLOAT3 lightDirection, XMFLOAT4 ambientColor, XMFLOAT4 diffuseColor, - XMFLOAT3 cameraPosition, XMFLOAT4 specularColor, float specularPower) + ID3D11ShaderResourceView* texture, XMFLOAT4 diffuseColor[], XMFLOAT4 lightPosition[]) { HRESULT result; D3D11_MAPPED_SUBRESOURCE mappedResource; unsigned int bufferNumber; MatrixBufferType* dataPtr; - LightBufferType* dataPtr2; - CameraBufferType* dataPtr3; + LightPositionBufferType* dataPtr2; + LightColorBufferType* dataPtr3; // Transpose the matrices to prepare them for the shader. worldMatrix = XMMatrixTranspose(worldMatrix); @@ -410,51 +439,59 @@ bool LightShaderClass::SetShaderParameters(ID3D11DeviceContext* deviceContext, X return false; } - // Get a pointer to the data in the constant buffer. - dataPtr3 = (CameraBufferType*)mappedResource.pData; - - // Copy the camera position into the constant buffer. - dataPtr3->cameraPosition = cameraPosition; - dataPtr3->padding = 0.0f; - - // Unlock the camera constant buffer. - deviceContext->Unmap(m_cameraBuffer, 0); - - // Set the position of the camera constant buffer in the vertex shader. - bufferNumber = 1; - - // Now set the camera constant buffer in the vertex shader with the updated values. - deviceContext->VSSetConstantBuffers(bufferNumber, 1, &m_cameraBuffer); - - // Set shader texture resource in the pixel shader. - deviceContext->PSSetShaderResources(0, 1, &texture); - - // Lock the light constant buffer so it can be written to. - result = deviceContext->Map(m_lightBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + // Lock the light position constant buffer so it can be written to. + result = deviceContext->Map(m_lightPositionBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); if (FAILED(result)) { return false; } // Get a pointer to the data in the constant buffer. - dataPtr2 = (LightBufferType*)mappedResource.pData; + dataPtr2 = (LightPositionBufferType*)mappedResource.pData; - // Copy the lighting variables into the constant buffer. - dataPtr2->ambientColor = ambientColor; - dataPtr2->diffuseColor = diffuseColor; - dataPtr2->lightDirection = lightDirection; - dataPtr2->specularColor = specularColor; - dataPtr2->specularPower = specularPower; - //dataPtr2->padding = 0.0f; + // Copy the light position variables into the constant buffer. + dataPtr2->lightPosition[0] = lightPosition[0]; + dataPtr2->lightPosition[1] = lightPosition[1]; + dataPtr2->lightPosition[2] = lightPosition[2]; + dataPtr2->lightPosition[3] = lightPosition[3]; // Unlock the constant buffer. - deviceContext->Unmap(m_lightBuffer, 0); + deviceContext->Unmap(m_lightPositionBuffer, 0); - // Set the position of the light constant buffer in the pixel shader. + // Set the position of the constant buffer in the vertex shader. + bufferNumber = 1; + + // Finally set the constant buffer in the vertex shader with the updated values. + deviceContext->VSSetConstantBuffers(bufferNumber, 1, &m_lightPositionBuffer); + + // Set shader texture resource in the pixel shader. + deviceContext->PSSetShaderResources(0, 1, &texture); + + // Lock the light color constant buffer so it can be written to. + result = deviceContext->Map(m_lightColorBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + if (FAILED(result)) + { + return false; + } + + // Get a pointer to the data in the constant buffer. + dataPtr3 = (LightColorBufferType*)mappedResource.pData; + + // Copy the light color variables into the constant buffer. + dataPtr3->diffuseColor[0] = diffuseColor[0]; + dataPtr3->diffuseColor[1] = diffuseColor[1]; + dataPtr3->diffuseColor[2] = diffuseColor[2]; + dataPtr3->diffuseColor[3] = diffuseColor[3]; + + // Unlock the constant buffer. + deviceContext->Unmap(m_lightColorBuffer, 0); + + // Set the position of the constant buffer in the pixel shader. bufferNumber = 0; - // Finally set the light constant buffer in the pixel shader with the updated values. - deviceContext->PSSetConstantBuffers(bufferNumber, 1, &m_lightBuffer); + // Finally set the constant buffer in the pixel shader with the updated values. + deviceContext->PSSetConstantBuffers(bufferNumber, 1, &m_lightColorBuffer); + return true; } diff --git a/enginecustom/Lightshaderclass.h b/enginecustom/Lightshaderclass.h index c256012..8e338b3 100644 --- a/enginecustom/Lightshaderclass.h +++ b/enginecustom/Lightshaderclass.h @@ -5,6 +5,11 @@ #define _LIGHTSHADERCLASS_H_ +///////////// +// GLOBALS // +///////////// +const int NUM_LIGHTS = 4; + ////////////// // INCLUDES // ////////////// @@ -45,6 +50,16 @@ private: XMFLOAT4 specularColor; }; + struct LightColorBufferType + { + XMFLOAT4 diffuseColor[NUM_LIGHTS]; + }; + + struct LightPositionBufferType + { + XMFLOAT4 lightPosition[NUM_LIGHTS]; + }; + public: LightShaderClass(); LightShaderClass(const LightShaderClass&); @@ -52,14 +67,14 @@ public: bool Initialize(ID3D11Device*, HWND); void Shutdown(); - bool Render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT3, XMFLOAT4, XMFLOAT4, XMFLOAT3, XMFLOAT4, float); + bool Render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4[], XMFLOAT4[]); private: bool InitializeShader(ID3D11Device*, HWND, WCHAR*, WCHAR*); void ShutdownShader(); void OutputShaderErrorMessage(ID3D10Blob*, HWND, WCHAR*); - bool SetShaderParameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT3, XMFLOAT4, XMFLOAT4, XMFLOAT3, XMFLOAT4, float); + bool SetShaderParameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4[], XMFLOAT4[]); void RenderShader(ID3D11DeviceContext*, int); private: @@ -70,6 +85,8 @@ private: ID3D11Buffer* m_matrixBuffer; ID3D11Buffer* m_cameraBuffer; ID3D11Buffer* m_lightBuffer; + ID3D11Buffer* m_lightColorBuffer; + ID3D11Buffer* m_lightPositionBuffer; }; #endif \ No newline at end of file diff --git a/enginecustom/alpha01.tga b/enginecustom/alpha01.tga new file mode 100644 index 0000000..74b7943 Binary files /dev/null and b/enginecustom/alpha01.tga differ diff --git a/enginecustom/alphamap.ps b/enginecustom/alphamap.ps new file mode 100644 index 0000000..ee2f6bc --- /dev/null +++ b/enginecustom/alphamap.ps @@ -0,0 +1,45 @@ +///////////// +// GLOBALS // +///////////// +Texture2D shaderTexture1 : register(t0); +Texture2D shaderTexture2 : register(t1); +Texture2D shaderTexture3 : register(t2); +SamplerState SampleType : register(s0); + +////////////// +// TYPEDEFS // +////////////// +struct PixelInputType +{ + float4 position : SV_POSITION; + float2 tex : TEXCOORD0; +}; + +//////////////////////////////////////////////////////////////////////////////// +// Pixel Shader +//////////////////////////////////////////////////////////////////////////////// +float4 AlphaMapPixelShader(PixelInputType input) : SV_TARGET +{ + float4 color1; + float4 color2; + float4 alphaValue; + float4 blendColor; + + + // Get the pixel color from the first texture. + color1 = shaderTexture1.Sample(SampleType, input.tex); + + // Get the pixel color from the second texture. + color2 = shaderTexture2.Sample(SampleType, input.tex); + + // Get the pixel color from the alpha texture. + alphaValue = shaderTexture3.Sample(SampleType, input.tex); + + // Combine the two textures based on the alpha value. + blendColor = (alphaValue * color1) + ((1.0 - alphaValue) * color2); + + // Saturate the final color value. + blendColor = saturate(blendColor); + + return blendColor; +} \ No newline at end of file diff --git a/enginecustom/alphamap.vs b/enginecustom/alphamap.vs new file mode 100644 index 0000000..1885da1 --- /dev/null +++ b/enginecustom/alphamap.vs @@ -0,0 +1,49 @@ +///////////// +// GLOBALS // +///////////// +cbuffer MatrixBuffer +{ + matrix worldMatrix; + matrix viewMatrix; + matrix projectionMatrix; +}; + + +////////////// +// TYPEDEFS // +////////////// +struct VertexInputType +{ + float4 position : POSITION; + float2 tex : TEXCOORD0; + float3 normal : NORMAL; +}; + +struct PixelInputType +{ + float4 position : SV_POSITION; + float2 tex : TEXCOORD0; +}; + + +//////////////////////////////////////////////////////////////////////////////// +// Vertex Shader +//////////////////////////////////////////////////////////////////////////////// +PixelInputType AlphaMapVertexShader(VertexInputType input) +{ + PixelInputType output; + + + // Change the position vector to be 4 units for proper matrix calculations. + input.position.w = 1.0f; + + // Calculate the position of the vertex against the world, view, and projection matrices. + output.position = mul(input.position, worldMatrix); + output.position = mul(output.position, viewMatrix); + output.position = mul(output.position, projectionMatrix); + + // Store the texture coordinates for the pixel shader. + output.tex = input.tex; + + return output; +} diff --git a/enginecustom/alphamapshaderclass.cpp b/enginecustom/alphamapshaderclass.cpp new file mode 100644 index 0000000..a1d9b70 --- /dev/null +++ b/enginecustom/alphamapshaderclass.cpp @@ -0,0 +1,378 @@ +#include "alphamapshaderclass.h" + + +AlphaMapShaderClass::AlphaMapShaderClass() +{ + m_vertexShader = 0; + m_pixelShader = 0; + m_layout = 0; + m_matrixBuffer = 0; + m_sampleState = 0; +} + + +AlphaMapShaderClass::AlphaMapShaderClass(const AlphaMapShaderClass& other) +{ +} + + +AlphaMapShaderClass::~AlphaMapShaderClass() +{ +} + + +bool AlphaMapShaderClass::Initialize(ID3D11Device* device, HWND hwnd) +{ + bool result; + wchar_t vsFilename[128]; + wchar_t psFilename[128]; + int error; + + // Set the filename of the vertex shader. + error = wcscpy_s(vsFilename, 128, L"alphamap.vs"); + if (error != 0) + { + return false; + } + + // Set the filename of the pixel shader. + error = wcscpy_s(psFilename, 128, L"alphamap.ps"); + if (error != 0) + { + return false; + } + + // Initialize the vertex and pixel shaders. + result = InitializeShader(device, hwnd, vsFilename, psFilename); + if (!result) + { + return false; + } + + return true; +} + + +void AlphaMapShaderClass::Shutdown() +{ + // Shutdown the vertex and pixel shaders as well as the related objects. + ShutdownShader(); + + return; +} + + +bool AlphaMapShaderClass::Render(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, + ID3D11ShaderResourceView* texture1, ID3D11ShaderResourceView* texture2, ID3D11ShaderResourceView* texture3) +{ + bool result; + + + // Set the shader parameters that it will use for rendering. + result = SetShaderParameters(deviceContext, worldMatrix, viewMatrix, projectionMatrix, texture1, texture2, texture3); + if (!result) + { + return false; + } + + // Now render the prepared buffers with the shader. + RenderShader(deviceContext, indexCount); + + return true; +} + + +bool AlphaMapShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename, WCHAR* psFilename) +{ + HRESULT result; + ID3D10Blob* errorMessage; + ID3D10Blob* vertexShaderBuffer; + ID3D10Blob* pixelShaderBuffer; + D3D11_INPUT_ELEMENT_DESC polygonLayout[3]; + unsigned int numElements; + D3D11_BUFFER_DESC matrixBufferDesc; + D3D11_SAMPLER_DESC samplerDesc; + + + // Initialize the pointers this function will use to null. + errorMessage = 0; + vertexShaderBuffer = 0; + pixelShaderBuffer = 0; + + // Compile the vertex shader code. + result = D3DCompileFromFile(vsFilename, NULL, NULL, "AlphaMapVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, + &vertexShaderBuffer, &errorMessage); + if (FAILED(result)) + { + // If the shader failed to compile it should have writen something to the error message. + if (errorMessage) + { + OutputShaderErrorMessage(errorMessage, hwnd, vsFilename); + } + // If there was nothing in the error message then it simply could not find the shader file itself. + else + { + MessageBox(hwnd, vsFilename, L"Missing Shader File", MB_OK); + } + + return false; + } + + // Compile the pixel shader code. + result = D3DCompileFromFile(psFilename, NULL, NULL, "AlphaMapPixelShader", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, + &pixelShaderBuffer, &errorMessage); + if (FAILED(result)) + { + // If the shader failed to compile it should have writen something to the error message. + if (errorMessage) + { + OutputShaderErrorMessage(errorMessage, hwnd, psFilename); + } + // If there was nothing in the error message then it simply could not find the file itself. + else + { + MessageBox(hwnd, psFilename, L"Missing Shader File", MB_OK); + } + + return false; + } + + // Create the vertex shader from the buffer. + result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader); + if (FAILED(result)) + { + return false; + } + + // Create the pixel shader from the buffer. + result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &m_pixelShader); + if (FAILED(result)) + { + return false; + } + + // Create the vertex input layout description. + polygonLayout[0].SemanticName = "POSITION"; + polygonLayout[0].SemanticIndex = 0; + polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT; + polygonLayout[0].InputSlot = 0; + polygonLayout[0].AlignedByteOffset = 0; + polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + polygonLayout[0].InstanceDataStepRate = 0; + + polygonLayout[1].SemanticName = "TEXCOORD"; + polygonLayout[1].SemanticIndex = 0; + polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT; + polygonLayout[1].InputSlot = 0; + polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT; + polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + polygonLayout[1].InstanceDataStepRate = 0; + + polygonLayout[2].SemanticName = "NORMAL"; + polygonLayout[2].SemanticIndex = 0; + polygonLayout[2].Format = DXGI_FORMAT_R32G32B32_FLOAT; + polygonLayout[2].InputSlot = 0; + polygonLayout[2].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT; + polygonLayout[2].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + polygonLayout[2].InstanceDataStepRate = 0; + + // Get a count of the elements in the layout. + numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]); + + // Create the vertex input layout. + result = device->CreateInputLayout(polygonLayout, numElements, vertexShaderBuffer->GetBufferPointer(), + vertexShaderBuffer->GetBufferSize(), &m_layout); + if (FAILED(result)) + { + return false; + } + + // Release the vertex shader buffer and pixel shader buffer since they are no longer needed. + vertexShaderBuffer->Release(); + vertexShaderBuffer = 0; + + pixelShaderBuffer->Release(); + pixelShaderBuffer = 0; + + // Setup the description of the dynamic matrix constant buffer that is in the vertex shader. + matrixBufferDesc.Usage = D3D11_USAGE_DYNAMIC; + matrixBufferDesc.ByteWidth = sizeof(MatrixBufferType); + matrixBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + matrixBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + matrixBufferDesc.MiscFlags = 0; + matrixBufferDesc.StructureByteStride = 0; + + // Create the constant buffer pointer so we can access the vertex shader constant buffer from within this class. + result = device->CreateBuffer(&matrixBufferDesc, NULL, &m_matrixBuffer); + if (FAILED(result)) + { + return false; + } + + // Create a texture sampler state description. + samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; + samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; + samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; + samplerDesc.MipLODBias = 0.0f; + samplerDesc.MaxAnisotropy = 1; + samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; + samplerDesc.BorderColor[0] = 0; + samplerDesc.BorderColor[1] = 0; + samplerDesc.BorderColor[2] = 0; + samplerDesc.BorderColor[3] = 0; + samplerDesc.MinLOD = 0; + samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; + + // Create the texture sampler state. + result = device->CreateSamplerState(&samplerDesc, &m_sampleState); + if (FAILED(result)) + { + return false; + } + + return true; +} + + +void AlphaMapShaderClass::ShutdownShader() +{ + // Release the sampler state. + if (m_sampleState) + { + m_sampleState->Release(); + m_sampleState = 0; + } + + // Release the matrix constant buffer. + if (m_matrixBuffer) + { + m_matrixBuffer->Release(); + m_matrixBuffer = 0; + } + + // Release the layout. + if (m_layout) + { + m_layout->Release(); + m_layout = 0; + } + + // Release the pixel shader. + if (m_pixelShader) + { + m_pixelShader->Release(); + m_pixelShader = 0; + } + + // Release the vertex shader. + if (m_vertexShader) + { + m_vertexShader->Release(); + m_vertexShader = 0; + } + + return; +} + + +void AlphaMapShaderClass::OutputShaderErrorMessage(ID3D10Blob* errorMessage, HWND hwnd, WCHAR* shaderFilename) +{ + char* compileErrors; + unsigned long long bufferSize, i; + ofstream fout; + + + // Get a pointer to the error message text buffer. + compileErrors = (char*)(errorMessage->GetBufferPointer()); + + // Get the length of the message. + bufferSize = errorMessage->GetBufferSize(); + + // Open a file to write the error message to. + fout.open("shader-error.txt"); + + // Write out the error message. + for (i = 0; i < bufferSize; i++) + { + fout << compileErrors[i]; + } + + // Close the file. + fout.close(); + + // Release the error message. + errorMessage->Release(); + errorMessage = 0; + + // Pop a message up on the screen to notify the user to check the text file for compile errors. + MessageBox(hwnd, L"Error compiling shader. Check shader-error.txt for message.", shaderFilename, MB_OK); + + return; +} + + +bool AlphaMapShaderClass::SetShaderParameters(ID3D11DeviceContext* deviceContext, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, + ID3D11ShaderResourceView* texture1, ID3D11ShaderResourceView* texture2, ID3D11ShaderResourceView* texture3) +{ + HRESULT result; + D3D11_MAPPED_SUBRESOURCE mappedResource; + MatrixBufferType* dataPtr; + unsigned int bufferNumber; + + + // Transpose the matrices to prepare them for the shader. + worldMatrix = XMMatrixTranspose(worldMatrix); + viewMatrix = XMMatrixTranspose(viewMatrix); + projectionMatrix = XMMatrixTranspose(projectionMatrix); + + // Lock the constant buffer so it can be written to. + result = deviceContext->Map(m_matrixBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + if (FAILED(result)) + { + return false; + } + + // Get a pointer to the data in the constant buffer. + dataPtr = (MatrixBufferType*)mappedResource.pData; + + // Copy the matrices into the constant buffer. + dataPtr->world = worldMatrix; + dataPtr->view = viewMatrix; + dataPtr->projection = projectionMatrix; + + // Unlock the constant buffer. + deviceContext->Unmap(m_matrixBuffer, 0); + + // Set the position of the constant buffer in the vertex shader. + bufferNumber = 0; + + // Finally set the constant buffer in the vertex shader with the updated values. + deviceContext->VSSetConstantBuffers(bufferNumber, 1, &m_matrixBuffer); + + // Set shader texture resources in the pixel shader. + deviceContext->PSSetShaderResources(0, 1, &texture1); + deviceContext->PSSetShaderResources(1, 1, &texture2); + deviceContext->PSSetShaderResources(2, 1, &texture3); + + return true; +} + + +void AlphaMapShaderClass::RenderShader(ID3D11DeviceContext* deviceContext, int indexCount) +{ + // Set the vertex input layout. + deviceContext->IASetInputLayout(m_layout); + + // Set the vertex and pixel shaders that will be used to render this triangle. + deviceContext->VSSetShader(m_vertexShader, NULL, 0); + deviceContext->PSSetShader(m_pixelShader, NULL, 0); + + // Set the sampler state in the pixel shader. + deviceContext->PSSetSamplers(0, 1, &m_sampleState); + + // Render the triangle. + deviceContext->DrawIndexed(indexCount, 0, 0); + + return; +} \ No newline at end of file diff --git a/enginecustom/alphamapshaderclass.h b/enginecustom/alphamapshaderclass.h new file mode 100644 index 0000000..ff4e4e7 --- /dev/null +++ b/enginecustom/alphamapshaderclass.h @@ -0,0 +1,54 @@ +#ifndef _ALPHAMAPSHADERCLASS_H_ +#define _ALPHAMAPSHADERCLASS_H_ + + +////////////// +// INCLUDES // +////////////// +#include +#include +#include +#include +using namespace DirectX; +using namespace std; + + +//////////////////////////////////////////////////////////////////////////////// +// Class name: AlphaMapShaderClass +//////////////////////////////////////////////////////////////////////////////// +class AlphaMapShaderClass +{ +private: + struct MatrixBufferType + { + XMMATRIX world; + XMMATRIX view; + XMMATRIX projection; + }; + +public: + AlphaMapShaderClass(); + AlphaMapShaderClass(const AlphaMapShaderClass&); + ~AlphaMapShaderClass(); + + bool Initialize(ID3D11Device*, HWND); + void Shutdown(); + bool Render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*); + +private: + bool InitializeShader(ID3D11Device*, HWND, WCHAR*, WCHAR*); + void ShutdownShader(); + void OutputShaderErrorMessage(ID3D10Blob*, HWND, WCHAR*); + + bool SetShaderParameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*); + void RenderShader(ID3D11DeviceContext*, int); + +private: + ID3D11VertexShader* m_vertexShader; + ID3D11PixelShader* m_pixelShader; + ID3D11InputLayout* m_layout; + ID3D11Buffer* m_matrixBuffer; + ID3D11SamplerState* m_sampleState; +}; + +#endif \ No newline at end of file diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index 7ae6c4e..725dbac 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -5,14 +5,24 @@ ApplicationClass::ApplicationClass() m_Direct3D = 0; m_Camera = 0; m_MultiTextureShader = 0; + m_AlphaMapShader = 0; m_Model = 0; m_LightShader = 0; + m_LightMapShader = 0; m_Light = 0; m_TextureShader = 0; m_Bitmap = 0; m_Sprite = 0; m_Timer = 0; m_MouseStrings = 0; + m_FontShader = 0; + m_Font = 0; + m_TextString1 = 0; + m_TextString2 = 0; + m_TextString3 = 0; + m_Fps = 0; + m_FpsString = 0; + } @@ -29,10 +39,11 @@ ApplicationClass::~ApplicationClass() bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) { char mouseString1[32], mouseString2[32], mouseString3[32]; - char modelFilename[128]; - char textureFilename1[128], textureFilename2[128]; + char testString1[32], testString2[32], testString3[32]; + char modelFilename[128], textureFilename1[128], textureFilename2[128], textureFilename3[128]; char bitmapFilename[128]; char spriteFilename[128]; + char fpsString[32]; bool result; @@ -59,9 +70,60 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) } // Set the initial position of the camera. - m_Camera->SetPosition(0.0f, 0.0f, -10.0f); + m_Camera->SetPosition(0.0f, 0.0f, -12.0f); m_Camera->SetRotation(0.0f, 0.0f, 0.0f); + // Create and initialize the font shader object. + m_FontShader = new FontShaderClass; + + result = m_FontShader->Initialize(m_Direct3D->GetDevice(), hwnd); + if (!result) + { + MessageBox(hwnd, L"Could not initialize the font shader object.", L"Error", MB_OK); + return false; + } + + // Create and initialize the font object. + m_Font = new FontClass; + + result = m_Font->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), 0); + if (!result) + { + return false; + } + + // Set the strings we want to display. + strcpy_s(testString1, "Yo"); + strcpy_s(testString2, "Les"); + strcpy_s(testString3, "Noobs !"); + + // Create and initialize the first text object. + m_TextString1 = new TextClass; + + result = m_TextString1->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), screenWidth, screenHeight, 32, m_Font, testString1, 25, screenHeight / 2 - m_Font->GetFontHeight(), 1.0f, 1.0f, 1.0f); + if (!result) + { + return false; + } + + // Create and initialize the second text object. + m_TextString2 = new TextClass; + + result = m_TextString2->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), screenWidth, screenHeight, 32, m_Font, testString2, 250, screenHeight / 2 - m_Font->GetFontHeight(), 0.0f, 1.0f, 1.0f); + if (!result) + { + return false; + } + + // Create and initialize the second text object. + m_TextString3 = new TextClass; + + result = m_TextString3->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), screenWidth, screenHeight, 32, m_Font, testString3, screenWidth / 2 - m_Font->GetSentencePixelLength(testString3), screenHeight / 2 - m_Font->GetFontHeight(), 1.0f, 1.0f, 0.0f); + if (!result) + { + return false; + } + // Create and initialize the texture shader object. m_TextureShader = new TextureShaderClass; @@ -142,16 +204,17 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) } // Set the file name of the model. - strcpy_s(modelFilename, "sphere.txt"); + strcpy_s(modelFilename, "cube.txt"); // Set the file name of the textures. strcpy_s(textureFilename1, "stone01.tga"); - strcpy_s(textureFilename2, "moss01.tga"); + strcpy_s(textureFilename2, "dirt01.tga"); + strcpy_s(textureFilename3, "alpha01.tga"); // Create and initialize the model object. m_Model = new ModelClass; - result = m_Model->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename1, textureFilename2); + result = m_Model->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), modelFilename, textureFilename1, textureFilename2, textureFilename3); if (!result) { MessageBox(hwnd, L"Could not initialize the model object.", L"Error", MB_OK); @@ -169,14 +232,63 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) return false; } - // Create and initialize the light object. - m_Light = new LightClass; + // Set the number of lights we will use. + m_numLights = 4; + + // Create and initialize the light objects array. + m_Lights = new LightClass[m_numLights]; + + // Manually set the color and position of each light. + m_Lights[0].SetDiffuseColor(1.0f, 0.0f, 0.0f, 1.0f); // Red + m_Lights[0].SetPosition(-3.0f, 1.0f, 3.0f); + + m_Lights[1].SetDiffuseColor(0.0f, 1.0f, 0.0f, 1.0f); // Green + m_Lights[1].SetPosition(3.0f, 1.0f, 3.0f); + + m_Lights[2].SetDiffuseColor(0.0f, 0.0f, 1.0f, 1.0f); // Blue + m_Lights[2].SetPosition(-3.0f, 1.0f, -3.0f); + + m_Lights[3].SetDiffuseColor(1.0f, 1.0f, 1.0f, 1.0f); // White + m_Lights[3].SetPosition(3.0f, 1.0f, -3.0f); + + // Create and initialize the light map shader object. + m_LightMapShader = new LightMapShaderClass; + + result = m_LightMapShader->Initialize(m_Direct3D->GetDevice(), hwnd); + if (!result) + { + MessageBox(hwnd, L"Could not initialize the light map shader object.", L"Error", MB_OK); + return false; + } + + // Create and initialize the alpha map shader object. + m_AlphaMapShader = new AlphaMapShaderClass; + + result = m_AlphaMapShader->Initialize(m_Direct3D->GetDevice(), hwnd); + if (!result) + { + MessageBox(hwnd, L"Could not initialize the alpha map shader object.", L"Error", MB_OK); + return false; + } + + // Create and initialize the fps object. + m_Fps = new FpsClass(); + + m_Fps->Initialize(); + + // Set the initial fps and fps string. + m_previousFps = -1; + strcpy_s(fpsString, "Fps: 0"); + + // Create and initialize the text object for the fps string. + m_FpsString = new TextClass; + + result = m_FpsString->Initialize(m_Direct3D->GetDevice(), m_Direct3D->GetDeviceContext(), screenWidth, screenHeight, 32, m_Font, fpsString, 10, 10, 0.0f, 1.0f, 0.0f); + if (!result) + { + return false; + } - m_Light->SetAmbientColor(0.15f, 0.15f, 0.15f, 1.0f); - m_Light->SetDiffuseColor(1.0f, 1.0f, 1.0f, 1.0f); - m_Light->SetDirection(1.0f, 0.0f, 1.0f); - m_Light->SetSpecularColor(1.0f, 1.0f, 1.0f, 1.0f); - m_Light->SetSpecularPower(32.0f); return true; } @@ -193,6 +305,57 @@ void ApplicationClass::Shutdown() delete[] m_MouseStrings; m_MouseStrings = 0; + // Release the text object for the fps string. + if (m_FpsString) + { + m_FpsString->Shutdown(); + delete m_FpsString; + m_FpsString = 0; + } + + // Release the fps object. + if (m_Fps) + { + delete m_Fps; + m_Fps = 0; + } + + // Release the text string objects. + if (m_TextString3) + { + m_TextString3->Shutdown(); + delete m_TextString3; + m_TextString3 = 0; + } + + if (m_TextString2) + { + m_TextString2->Shutdown(); + delete m_TextString2; + m_TextString2 = 0; + } + + if (m_TextString1) + { + m_TextString1->Shutdown(); + delete m_TextString1; + m_TextString1 = 0; + } + + // Release the font object. + if (m_Font) + { + m_Font->Shutdown(); + delete m_Font; + m_Font = 0; + } + + // Release the font shader object. + if (m_FontShader) + { + m_FontShader->Shutdown(); + delete m_FontShader; + m_FontShader = 0; } // Release the timer object. @@ -210,12 +373,12 @@ void ApplicationClass::Shutdown() m_Sprite = 0; } - // Release the light object. - if (m_Light) - { - delete m_Light; - m_Light = 0; - } + // Release the light objects. + if(m_Lights) + { + delete [] m_Lights; + m_Lights = 0; + } // Release the light shader object. if (m_LightShader) @@ -233,6 +396,14 @@ void ApplicationClass::Shutdown() m_LightShader = 0; } + // Release the light map shader object. + if (m_LightMapShader) + { + m_LightMapShader->Shutdown(); + delete m_LightMapShader; + m_LightMapShader = 0; + } + // Release the model object. if (m_Model) { @@ -280,6 +451,14 @@ void ApplicationClass::Shutdown() return; } + + // Release the alpha map shader object. + if (m_AlphaMapShader) + { + m_AlphaMapShader->Shutdown(); + delete m_AlphaMapShader; + m_AlphaMapShader = 0; + } } @@ -290,31 +469,35 @@ bool ApplicationClass::Frame(InputClass* Input) float frameTime; static float rotation = 0.0f; - static float x = 2.f; - static float y = 0.f; + static float x = 6.f; + static float y = 3.f; static float z = 0.f; bool result; // Check if the user pressed escape and wants to exit the application. if (Input->IsEscapePressed()) + + // Update the frames per second each frame. + result = UpdateFps(); + if (!result) { return false; } // Update the rotation variable each frame. - rotation -= 0.0174532925f * 0.1f; + rotation -= 0.0174532925f * 0.8f; if (rotation < 0.0f) { rotation += 360.0f; } // Update the x position variable each frame. - x -= 0.0174532925f * 0.54672f; + x -= 0.0174532925f * 0.6f; - y -= 0.0174532925f * 0.8972f; + y -= 0.0174532925f * 0.2f; // Update the z position variable each frame. - z -= 0.0174532925f * 0.8972f; + z -= 0.0174532925f * 0.2f; // Render the graphics scene. @@ -340,6 +523,8 @@ bool ApplicationClass::Frame(InputClass* Input) bool ApplicationClass::Render(float rotation, float x, float y, float z) { XMMATRIX worldMatrix, viewMatrix, orthoMatrix, projectionMatrix, rotateMatrix, translateMatrix, scaleMatrix, srMatrix; + XMFLOAT4 diffuseColor[4], lightPosition[4]; + int i; bool result; // Clear the buffers to begin the scene. @@ -354,8 +539,49 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) m_Direct3D->GetProjectionMatrix(projectionMatrix); m_Direct3D->GetOrthoMatrix(orthoMatrix); - // Turn off the Z buffer to begin all 2D rendering. + // Disable the Z buffer and enable alpha blending for 2D rendering. m_Direct3D->TurnZBufferOff(); + m_Direct3D->EnableAlphaBlending(); + + // Render the fps text string using the font shader. + m_FpsString->Render(m_Direct3D->GetDeviceContext()); + + result = m_FontShader->Render(m_Direct3D->GetDeviceContext(), m_FpsString->GetIndexCount(), worldMatrix, viewMatrix, orthoMatrix, + m_Font->GetTexture(), m_FpsString->GetPixelColor()); + if (!result) + { + return false; + } + + // Render the first text string using the font shader. + m_TextString1->Render(m_Direct3D->GetDeviceContext()); + + result = m_FontShader->Render(m_Direct3D->GetDeviceContext(), m_TextString1->GetIndexCount(), worldMatrix, viewMatrix, orthoMatrix, + m_Font->GetTexture(), m_TextString1->GetPixelColor()); + if (!result) + { + return false; + } + + // Render the second text string using the font shader. + m_TextString2->Render(m_Direct3D->GetDeviceContext()); + + result = m_FontShader->Render(m_Direct3D->GetDeviceContext(), m_TextString2->GetIndexCount(), worldMatrix, viewMatrix, orthoMatrix, + m_Font->GetTexture(), m_TextString2->GetPixelColor()); + if (!result) + { + return false; + } + + // Render the second text string using the font shader. + m_TextString3->Render(m_Direct3D->GetDeviceContext()); + + result = m_FontShader->Render(m_Direct3D->GetDeviceContext(), m_TextString3->GetIndexCount(), worldMatrix, viewMatrix, orthoMatrix, + m_Font->GetTexture(), m_TextString3->GetPixelColor()); + if (!result) + { + return false; + } // Render the mouse text strings using the font shader. for (i = 0; i < 3; i++) @@ -400,13 +626,17 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) return false; } + // Get the light properties. + for (i = 0; i < m_numLights; i++) + { + // Create the diffuse color array from the four light colors. + diffuseColor[i] = m_Lights[i].GetDiffuseColor(); + // Create the light position array from the four light positions. + lightPosition[i] = m_Lights[i].GetPosition(); + } - // Render the model using the multitexture shader. - result = m_MultiTextureShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, - m_Model->GetTexture(0), m_Model->GetTexture(1)); - - scaleMatrix = XMMatrixScaling(0.5f, 0.5f, 0.5f); // Build the scaling matrix. + scaleMatrix = XMMatrixScaling(0.75f, 0.75f, 0.75f); // Build the scaling matrix. rotateMatrix = XMMatrixRotationY(rotation); // Build the rotation matrix. translateMatrix = XMMatrixTranslation(x, y, z); // Build the translation matrix. @@ -417,28 +647,42 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z) // Render the model using the multitexture shader. m_Model->Render(m_Direct3D->GetDeviceContext()); - // Render the model using the light shader. - result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, m_Model->GetTexture(0), - m_Light->GetDirection(), m_Light->GetAmbientColor(), m_Light->GetDiffuseColor(), - m_Camera->GetPosition(), m_Light->GetSpecularColor(), m_Light->GetSpecularPower()); + // Lighting, utilise plusieurs lights donc Multiple Points Lighting + //result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, m_Model->GetTexture(0), + // diffuseColor, lightPosition); + //if (!result) + //{ + // return false; + //} + + // Lightmapping, utiliser light01.tga en deuxieme texture + //result = m_LightMapShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + // m_Model->GetTexture(0), m_Model->GetTexture(1)); + //if (!result) + //{ + // return false; + //} + + // MultiTexturing + //result = m_MultiTextureShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + // m_Model->GetTexture(0), m_Model->GetTexture(1)); + //if (!result) + //{ + // return false; + //} + + + // Alphamapping + result = m_AlphaMapShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, + m_Model->GetTexture(0), m_Model->GetTexture(1), m_Model->GetTexture(2)); if (!result) { return false; } - scaleMatrix = XMMatrixScaling(2.0f, 2.0f, 2.0f); // Build the scaling matrix. - rotateMatrix = XMMatrixRotationY(-rotation); // Build the rotation matrix. - translateMatrix = XMMatrixTranslation(-x, -y, -z); // Build the translation matrix. - - // Multiply the scale, rotation, and translation matrices together to create the final world transformation matrix. - srMatrix = XMMatrixMultiply(scaleMatrix, rotateMatrix); - worldMatrix = XMMatrixMultiply(srMatrix, translateMatrix); - - // Put the model vertex and index buffers on the graphics pipeline to prepare them for drawing. - m_Model->Render(m_Direct3D->GetDeviceContext()); - - // Turn the Z buffer back on now that all 2D rendering has completed. + // Enable the Z buffer and disable alpha blending now that 2D rendering is complete. m_Direct3D->TurnZBufferOn(); + m_Direct3D->DisableAlphaBlending(); // Present the rendered scene to the screen. m_Direct3D->EndScene(); @@ -492,12 +736,73 @@ bool ApplicationClass::UpdateMouseStrings(int mouseX, int mouseY, bool mouseDown // Update the sentence vertex buffer with the new string information. result = m_MouseStrings[2].UpdateText(m_Direct3D->GetDeviceContext(), m_Font, finalString, 10, 60, 1.0f, 1.0f, 1.0f); + +bool ApplicationClass::UpdateFps() +{ + int fps; + char tempString[16], finalString[16]; + float red, green, blue; + bool result; + + + // Update the fps each frame. + m_Fps->Frame(); + + // Get the current fps. + fps = m_Fps->GetFps(); + + // Check if the fps from the previous frame was the same, if so don't need to update the text string. + if (m_previousFps == fps) + { + return true; + } + + // Store the fps for checking next frame. + m_previousFps = fps; + + // Truncate the fps to below 100,000. + if (fps > 99999) + { + fps = 99999; + } + + // Convert the fps integer to string format. + sprintf_s(tempString, "%d", fps); + + // Setup the fps string. + strcpy_s(finalString, "Fps: "); + strcat_s(finalString, tempString); + + // If fps is 60 or above set the fps color to green. + if (fps >= 60) + { + red = 0.0f; + green = 1.0f; + blue = 0.0f; + } + + // If fps is below 60 set the fps color to yellow. + if (fps < 60) + { + red = 1.0f; + green = 1.0f; + blue = 0.0f; + } + + // If fps is below 30 set the fps color to red. + if (fps < 30) + { + red = 1.0f; + green = 0.0f; + blue = 0.0f; + } + + // Update the sentence vertex buffer with the new string information. + result = m_FpsString->UpdateText(m_Direct3D->GetDeviceContext(), m_Font, finalString, 10, 10, red, green, blue); if (!result) { return false; } return true; -} - - +} \ No newline at end of file diff --git a/enginecustom/applicationclass.h b/enginecustom/applicationclass.h index 9a8f23e..83af995 100644 --- a/enginecustom/applicationclass.h +++ b/enginecustom/applicationclass.h @@ -10,12 +10,17 @@ #include "modelclass.h" #include "lightshaderclass.h" #include "lightclass.h" +#include "lightmapshaderclass.h" #include "multitextureshaderclass.h" +#include "alphamapshaderclass.h" #include "bitmapclass.h" #include "textureshaderclass.h" #include "spriteclass.h" #include "timerclass.h" +#include "fontshaderclass.h" +#include "fontclass.h" #include "textclass.h" +#include "fpsclass.h" ///////////// // GLOBALS // @@ -43,19 +48,29 @@ public: private: bool Render(float, float, float, float); bool UpdateMouseStrings(int, int, bool); - + bool UpdateFps(); private: D3DClass* m_Direct3D; CameraClass* m_Camera; LightShaderClass* m_LightShader; LightClass* m_Light; + LightMapShaderClass* m_LightMapShader; MultiTextureShaderClass* m_MultiTextureShader; + AlphaMapShaderClass* m_AlphaMapShader; ModelClass* m_Model; TextureShaderClass* m_TextureShader; BitmapClass* m_Bitmap; SpriteClass* m_Sprite; TimerClass* m_Timer; TextClass* m_MouseStrings; + LightClass* m_Lights; + int m_numLights; + FontShaderClass* m_FontShader; + FontClass* m_Font; + TextClass *m_TextString1, *m_TextString2, *m_TextString3; + FpsClass* m_Fps; + TextClass* m_FpsString; + int m_previousFps; }; #endif diff --git a/enginecustom/cube.mtl b/enginecustom/cube.mtl deleted file mode 100644 index d189f87..0000000 --- a/enginecustom/cube.mtl +++ /dev/null @@ -1,22 +0,0 @@ -# Blender MTL File: 'None' -# Material Count: 2 - -newmtl Material -Ns 323.999994 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 2 - -newmtl Material.001 -Ns 225.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.000000 0.002280 0.800000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 2 diff --git a/enginecustom/d3dclass.cpp b/enginecustom/d3dclass.cpp index e91e8c7..53022f5 100644 --- a/enginecustom/d3dclass.cpp +++ b/enginecustom/d3dclass.cpp @@ -15,6 +15,8 @@ D3DClass::D3DClass() m_depthStencilView = 0; m_rasterState = 0; m_depthDisabledStencilState = 0; + m_alphaEnableBlendingState = 0; + m_alphaDisableBlendingState = 0; } @@ -48,6 +50,7 @@ bool D3DClass::Initialize(int screenWidth, int screenHeight, bool vsync, HWND hw D3D11_RASTERIZER_DESC rasterDesc; float fieldOfView, screenAspect; D3D11_DEPTH_STENCIL_DESC depthDisabledStencilDesc; + D3D11_BLEND_DESC blendStateDescription; // Store the vsync setting. m_vsync_enabled = vsync; @@ -373,6 +376,35 @@ bool D3DClass::Initialize(int screenWidth, int screenHeight, bool vsync, HWND hw return false; } + // Clear the blend state description. + ZeroMemory(&blendStateDescription, sizeof(D3D11_BLEND_DESC)); + + // Create an alpha enabled blend state description. + blendStateDescription.RenderTarget[0].BlendEnable = TRUE; + blendStateDescription.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE; + blendStateDescription.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; + blendStateDescription.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; + blendStateDescription.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; + blendStateDescription.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; + blendStateDescription.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; + blendStateDescription.RenderTarget[0].RenderTargetWriteMask = 0x0f; + + // Create the blend state using the description. + result = m_device->CreateBlendState(&blendStateDescription, &m_alphaEnableBlendingState); + if (FAILED(result)) + { + return false; + } + + // Modify the description to create an alpha disabled blend state description. + blendStateDescription.RenderTarget[0].BlendEnable = FALSE; + + // Create the blend state using the description. + result = m_device->CreateBlendState(&blendStateDescription, &m_alphaDisableBlendingState); + if (FAILED(result)) + { + return false; + } return true; } @@ -386,6 +418,18 @@ void D3DClass::Shutdown() m_swapChain->SetFullscreenState(false, NULL); } + if (m_alphaEnableBlendingState) + { + m_alphaEnableBlendingState->Release(); + m_alphaEnableBlendingState = 0; + } + + if (m_alphaDisableBlendingState) + { + m_alphaDisableBlendingState->Release(); + m_alphaDisableBlendingState = 0; + } + if (m_depthDisabledStencilState) { m_depthDisabledStencilState->Release(); @@ -552,4 +596,38 @@ void D3DClass::TurnZBufferOff() { m_deviceContext->OMSetDepthStencilState(m_depthDisabledStencilState, 1); return; -} \ No newline at end of file +} + +void D3DClass::EnableAlphaBlending() +{ + float blendFactor[4]; + + + // Setup the blend factor. + blendFactor[0] = 0.0f; + blendFactor[1] = 0.0f; + blendFactor[2] = 0.0f; + blendFactor[3] = 0.0f; + + // Turn on the alpha blending. + m_deviceContext->OMSetBlendState(m_alphaEnableBlendingState, blendFactor, 0xffffffff); + + return; +} + +void D3DClass::DisableAlphaBlending() +{ + float blendFactor[4]; + + + // Setup the blend factor. + blendFactor[0] = 0.0f; + blendFactor[1] = 0.0f; + blendFactor[2] = 0.0f; + blendFactor[3] = 0.0f; + + // Turn off the alpha blending. + m_deviceContext->OMSetBlendState(m_alphaDisableBlendingState, blendFactor, 0xffffffff); + + return; +} diff --git a/enginecustom/d3dclass.h b/enginecustom/d3dclass.h index bb3c0ce..c6b64fd 100644 --- a/enginecustom/d3dclass.h +++ b/enginecustom/d3dclass.h @@ -16,8 +16,11 @@ ////////////// // INCLUDES // ////////////// -#include -#include +#include "d3d11.h" +#include "directxmath.h" +#include "fontshaderclass.h" +#include "fontclass.h" +#include "textclass.h" using namespace DirectX; @@ -52,6 +55,9 @@ public: void TurnZBufferOn(); void TurnZBufferOff(); + void EnableAlphaBlending(); + void DisableAlphaBlending(); + private: bool m_vsync_enabled; int m_videoCardMemory; @@ -69,6 +75,8 @@ private: XMMATRIX m_orthoMatrix; D3D11_VIEWPORT m_viewport; ID3D11DepthStencilState* m_depthDisabledStencilState; + ID3D11BlendState* m_alphaEnableBlendingState; + ID3D11BlendState* m_alphaDisableBlendingState; }; #endif \ No newline at end of file diff --git a/enginecustom/dirt01.tga b/enginecustom/dirt01.tga new file mode 100644 index 0000000..453fd8d Binary files /dev/null and b/enginecustom/dirt01.tga differ diff --git a/enginecustom/enginecustom.vcxproj b/enginecustom/enginecustom.vcxproj index 8acceff..bb17b1f 100644 --- a/enginecustom/enginecustom.vcxproj +++ b/enginecustom/enginecustom.vcxproj @@ -20,31 +20,42 @@ + + + + + + + + + + + @@ -56,8 +67,14 @@ + + + + + + @@ -83,6 +100,10 @@ + + + + @@ -90,7 +111,10 @@ + + + 17.0 diff --git a/enginecustom/enginecustom.vcxproj.filters b/enginecustom/enginecustom.vcxproj.filters index 85b670f..5fc3cd9 100644 --- a/enginecustom/enginecustom.vcxproj.filters +++ b/enginecustom/enginecustom.vcxproj.filters @@ -1,60 +1,250 @@  - - - - - - - - - - - - - - - - + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {b016e481-576e-4d99-bdde-34cc10c55b1d} + + + {f76f9761-bbbe-42a8-935d-01f1b9172c38} + + + {741e1efe-db9b-48a7-9ecb-4c34a696f40e} + + + {51e14ebb-4f58-488f-8d0f-04935f51efda} + - - - - - - - - - - - - - - - - + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + - - - - + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + + + fonts + + + assets + + + assets + + + assets + + + assets + + + assets + + + assets + + + assets + - - - - - - - - + + fonts + + + fonts + + + shader + + + shader + + + shader + + + texture + + + texture + + + texture + + + texture + + + shader + + + shader + + + shader + + + texture + + + texture + - - + + fonts + + + assets + + + assets + + + assets + + + assets + \ No newline at end of file diff --git a/enginecustom/font.ps b/enginecustom/font.ps new file mode 100644 index 0000000..7de7ce3 --- /dev/null +++ b/enginecustom/font.ps @@ -0,0 +1,47 @@ +///////////// +// GLOBALS // +///////////// +Texture2D shaderTexture : register(t0); +SamplerState SampleType : register(s0); + +cbuffer PixelBuffer +{ + float4 pixelColor; +}; + + +////////////// +// TYPEDEFS // +////////////// +struct PixelInputType +{ + float4 position : SV_POSITION; + float2 tex : TEXCOORD0; +}; + +//////////////////////////////////////////////////////////////////////////////// +// Pixel Shader +//////////////////////////////////////////////////////////////////////////////// +float4 FontPixelShader(PixelInputType input) : SV_TARGET +{ + float4 color; + + + // Sample the texture pixel at this location. + color = shaderTexture.Sample(SampleType, input.tex); + + // If the color is black on the texture then treat this pixel as transparent. + if(color.r == 0.0f) + { + color.a = 0.0f; + } + + // If the color is other than black on the texture then this is a pixel in the font so draw it using the font pixel color. + else + { + color.a = 1.0f; + color = color * pixelColor; + } + + return color; +} diff --git a/enginecustom/font.vs b/enginecustom/font.vs new file mode 100644 index 0000000..0b71af3 --- /dev/null +++ b/enginecustom/font.vs @@ -0,0 +1,48 @@ +///////////// +// GLOBALS // +///////////// +cbuffer MatrixBuffer +{ + matrix worldMatrix; + matrix viewMatrix; + matrix projectionMatrix; +}; + + +////////////// +// TYPEDEFS // +////////////// +struct VertexInputType +{ + float4 position : POSITION; + float2 tex : TEXCOORD0; +}; + +struct PixelInputType +{ + float4 position : SV_POSITION; + float2 tex : TEXCOORD0; +}; + + +//////////////////////////////////////////////////////////////////////////////// +// Vertex Shader +//////////////////////////////////////////////////////////////////////////////// +PixelInputType FontVertexShader(VertexInputType input) +{ + PixelInputType output; + + + // Change the position vector to be 4 units for proper matrix calculations. + input.position.w = 1.0f; + + // Calculate the position of the vertex against the world, view, and projection matrices. + output.position = mul(input.position, worldMatrix); + output.position = mul(output.position, viewMatrix); + output.position = mul(output.position, projectionMatrix); + + // Store the texture coordinates for the pixel shader. + output.tex = input.tex; + + return output; +} diff --git a/enginecustom/font01.tga b/enginecustom/font01.tga new file mode 100644 index 0000000..042989d Binary files /dev/null and b/enginecustom/font01.tga differ diff --git a/enginecustom/font01.txt b/enginecustom/font01.txt new file mode 100644 index 0000000..b96a96f --- /dev/null +++ b/enginecustom/font01.txt @@ -0,0 +1,95 @@ +32 0.0 0.0 0 +33 ! 0.0 0.00390625 4 +34 " 0.0048828125 0.0107421875 6 +35 # 0.01171875 0.025390625 14 +36 $ 0.0263671875 0.0390625 13 +37 % 0.0400390625 0.0546875 15 +38 & 0.0556640625 0.0693359375 14 +39 ' 0.0703125 0.0732421875 3 +40 ( 0.07421875 0.0791015625 5 +41 ) 0.080078125 0.0849609375 5 +42 * 0.0859375 0.091796875 6 +43 + 0.0927734375 0.103515625 11 +44 , 0.1044921875 0.107421875 3 +45 - 0.1083984375 0.1142578125 6 +46 . 0.115234375 0.1181640625 3 +47 / 0.119140625 0.126953125 8 +48 0 0.1279296875 0.1416015625 14 +49 1 0.142578125 0.146484375 4 +50 2 0.1474609375 0.1591796875 12 +51 3 0.16015625 0.1708984375 11 +52 4 0.171875 0.1845703125 13 +53 5 0.185546875 0.1962890625 11 +54 6 0.197265625 0.2099609375 13 +55 7 0.2109375 0.22265625 12 +56 8 0.2236328125 0.236328125 13 +57 9 0.2373046875 0.2490234375 12 +58 : 0.25 0.2529296875 3 +59 ; 0.25390625 0.2568359375 3 +60 < 0.2578125 0.267578125 10 +61 = 0.2685546875 0.279296875 11 +62 > 0.2802734375 0.2900390625 10 +63 ? 0.291015625 0.302734375 12 +64 @ 0.3037109375 0.3173828125 14 +65 A 0.318359375 0.33203125 14 +66 B 0.3330078125 0.3447265625 12 +67 C 0.345703125 0.3564453125 11 +68 D 0.357421875 0.3701171875 13 +69 E 0.37109375 0.3818359375 11 +70 F 0.3828125 0.3935546875 11 +71 G 0.39453125 0.40625 12 +72 H 0.4072265625 0.41796875 11 +73 I 0.4189453125 0.421875 3 +74 J 0.4228515625 0.4326171875 10 +75 K 0.43359375 0.4443359375 11 +76 L 0.4453125 0.4541015625 9 +77 M 0.455078125 0.4697265625 15 +78 N 0.470703125 0.482421875 12 +79 O 0.4833984375 0.49609375 13 +80 P 0.4970703125 0.5078125 12 +81 Q 0.509765625 0.5224609375 13 +82 R 0.5234375 0.53515625 12 +83 S 0.5361328125 0.548828125 13 +84 T 0.5498046875 0.5615234375 12 +85 U 0.5625 0.57421875 12 +86 V 0.5751953125 0.5888671875 14 +87 W 0.58984375 0.609375 20 +88 X 0.6103515625 0.6220703125 12 +89 Y 0.623046875 0.6357421875 13 +90 Z 0.63671875 0.6474609375 11 +91 [ 0.6484375 0.654296875 6 +92 \ 0.6552734375 0.6630859375 8 +93 ] 0.6640625 0.6689453125 5 +94 ^ 0.669921875 0.6806640625 11 +95 _ 0.681640625 0.6904296875 9 +96 ` 0.69140625 0.6962890625 5 +97 a 0.697265625 0.70703125 10 +98 b 0.7080078125 0.7177734375 10 +99 c 0.71875 0.7275390625 9 +100 d 0.728515625 0.73828125 10 +101 e 0.7392578125 0.748046875 9 +102 f 0.7490234375 0.755859375 7 +103 g 0.7568359375 0.7666015625 10 +104 h 0.767578125 0.7763671875 9 +105 i 0.77734375 0.7802734375 3 +106 j 0.78125 0.7861328125 5 +107 k 0.787109375 0.796875 10 +108 l 0.7978515625 0.80078125 3 +109 m 0.8017578125 0.8154296875 14 +110 n 0.81640625 0.826171875 10 +111 o 0.8271484375 0.8369140625 10 +112 p 0.837890625 0.84765625 10 +113 q 0.8486328125 0.8583984375 10 +114 r 0.859375 0.8671875 8 +115 s 0.8681640625 0.8779296875 10 +116 t 0.87890625 0.8857421875 7 +117 u 0.88671875 0.8955078125 9 +118 v 0.896484375 0.908203125 12 +119 w 0.9091796875 0.9248046875 16 +120 x 0.92578125 0.935546875 10 +121 y 0.9365234375 0.9453125 9 +122 z 0.9462890625 0.9560546875 10 +123 { 0.95703125 0.9638671875 7 +124 | 0.96484375 0.966796875 2 +125 } 0.9677734375 0.974609375 7 +126 ~ 0.9755859375 0.986328125 11 diff --git a/enginecustom/fontclass.cpp b/enginecustom/fontclass.cpp new file mode 100644 index 0000000..68b4f4b --- /dev/null +++ b/enginecustom/fontclass.cpp @@ -0,0 +1,252 @@ +#include "fontclass.h" + +FontClass::FontClass() +{ + m_Font = 0; + m_Texture = 0; +} + + +FontClass::FontClass(const FontClass& other) +{ +} + + +FontClass::~FontClass() +{ +} + +bool FontClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, int fontChoice) +{ + char fontFilename[128]; + char fontTextureFilename[128]; + bool result; + + // Choose one of the available fonts, and default to the first font otherwise. + switch (fontChoice) + { + case 0: + { + strcpy_s(fontFilename, "font01.txt"); + strcpy_s(fontTextureFilename, "font01.tga"); + m_fontHeight = 32.0f; + m_spaceSize = 3; + break; + } + default: + { + strcpy_s(fontFilename, "font01.txt"); + strcpy_s(fontTextureFilename, "font01.tga"); + m_fontHeight = 32.0f; + m_spaceSize = 3; + break; + } + } + + // Load in the text file containing the font data. + result = LoadFontData(fontFilename); + if (!result) + { + return false; + } + + // Load the texture that has the font characters on it. + result = LoadTexture(device, deviceContext, fontTextureFilename); + if (!result) + { + return false; + } + + return true; +} + +void FontClass::Shutdown() +{ + // Release the font texture. + ReleaseTexture(); + + // Release the font data. + ReleaseFontData(); + + return; +} + +bool FontClass::LoadFontData(char* filename) +{ + std::ifstream fin; + int i; + char temp; + + // Create the font spacing buffer. + m_Font = new FontType[95]; + + // Read in the font size and spacing between chars. + fin.open(filename); + if (fin.fail()) + { + return false; + } + + // Read in the 95 used ascii characters for text. + for (i = 0; i < 95; i++) + { + fin.get(temp); + while (temp != ' ') + { + fin.get(temp); + } + fin.get(temp); + while (temp != ' ') + { + fin.get(temp); + } + + fin >> m_Font[i].left; + fin >> m_Font[i].right; + fin >> m_Font[i].size; + } + + // Close the file. + fin.close(); + + return true; +} + +void FontClass::ReleaseFontData() +{ + // Release the font data array. + if (m_Font) + { + delete[] m_Font; + m_Font = 0; + } + + return; +} + +bool FontClass::LoadTexture(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* filename) +{ + bool result; + + + // Create and initialize the font texture object. + m_Texture = new TextureClass; + + result = m_Texture->Initialize(device, deviceContext, filename); + if (!result) + { + return false; + } + + return true; +} + +void FontClass::ReleaseTexture() +{ + // Release the texture object. + if (m_Texture) + { + m_Texture->Shutdown(); + delete m_Texture; + m_Texture = 0; + } + + return; +} + +ID3D11ShaderResourceView* FontClass::GetTexture() +{ + return m_Texture->GetTexture(); +} + +void FontClass::BuildVertexArray(void* vertices, char* sentence, float drawX, float drawY) +{ + VertexType* vertexPtr; + int numLetters, index, i, letter; + + + // Coerce the input vertices into a VertexType structure. + vertexPtr = (VertexType*)vertices; + + // Get the number of letters in the sentence. + numLetters = (int)strlen(sentence); + + // Initialize the index to the vertex array. + index = 0; + + // Draw each letter onto a quad. + for (i = 0; i < numLetters; i++) + { + letter = ((int)sentence[i]) - 32; + + // If the letter is a space then just move over three pixels. + if (letter == 0) + { + drawX = drawX + m_spaceSize; + } + else + { + // First triangle in quad. + vertexPtr[index].position = XMFLOAT3(drawX, drawY, 0.0f); // Top left. + vertexPtr[index].texture = XMFLOAT2(m_Font[letter].left, 0.0f); + index++; + + vertexPtr[index].position = XMFLOAT3((drawX + m_Font[letter].size), (drawY - m_fontHeight), 0.0f); // Bottom right. + vertexPtr[index].texture = XMFLOAT2(m_Font[letter].right, 1.0f); + index++; + + vertexPtr[index].position = XMFLOAT3(drawX, (drawY - m_fontHeight), 0.0f); // Bottom left. + vertexPtr[index].texture = XMFLOAT2(m_Font[letter].left, 1.0f); + index++; + + // Second triangle in quad. + vertexPtr[index].position = XMFLOAT3(drawX, drawY, 0.0f); // Top left. + vertexPtr[index].texture = XMFLOAT2(m_Font[letter].left, 0.0f); + index++; + + vertexPtr[index].position = XMFLOAT3(drawX + m_Font[letter].size, drawY, 0.0f); // Top right. + vertexPtr[index].texture = XMFLOAT2(m_Font[letter].right, 0.0f); + index++; + + vertexPtr[index].position = XMFLOAT3((drawX + m_Font[letter].size), (drawY - m_fontHeight), 0.0f); // Bottom right. + vertexPtr[index].texture = XMFLOAT2(m_Font[letter].right, 1.0f); + index++; + + // Update the x location for drawing by the size of the letter and one pixel. + drawX = drawX + m_Font[letter].size + 1.0f; + } + } + + return; +} + +int FontClass::GetSentencePixelLength(char* sentence) +{ + int pixelLength, numLetters, i, letter; + + + pixelLength = 0; + numLetters = (int)strlen(sentence); + + for (i = 0; i < numLetters; i++) + { + letter = ((int)sentence[i]) - 32; + + // If the letter is a space then count it as three pixels. + if (letter == 0) + { + pixelLength += m_spaceSize; + } + else + { + pixelLength += (m_Font[letter].size + 1); + } + } + + return pixelLength; +} + +int FontClass::GetFontHeight() +{ + return (int)m_fontHeight; +} diff --git a/enginecustom/fontclass.h b/enginecustom/fontclass.h new file mode 100644 index 0000000..cd5a11e --- /dev/null +++ b/enginecustom/fontclass.h @@ -0,0 +1,64 @@ +#ifndef _FONTCLASS_H_ +#define _FONTCLASS_H_ + + +////////////// +// INCLUDES // +////////////// +#include +#include +using namespace DirectX; + + +/////////////////////// +// MY CLASS INCLUDES // +/////////////////////// +#include "textureclass.h" + + +//////////////////////////////////////////////////////////////////////////////// +// Class name: FontClass +//////////////////////////////////////////////////////////////////////////////// +class FontClass +{ +private: + struct FontType + { + float left, right; + int size; + }; + + struct VertexType + { + XMFLOAT3 position; + XMFLOAT2 texture; + }; + +public: + FontClass(); + FontClass(const FontClass&); + ~FontClass(); + + bool Initialize(ID3D11Device*, ID3D11DeviceContext*, int); + void Shutdown(); + + ID3D11ShaderResourceView* GetTexture(); + + void BuildVertexArray(void*, char*, float, float); + int GetSentencePixelLength(char*); + int GetFontHeight(); + +private: + bool LoadFontData(char*); + void ReleaseFontData(); + bool LoadTexture(ID3D11Device*, ID3D11DeviceContext*, char*); + void ReleaseTexture(); + +private: + FontType* m_Font; + TextureClass* m_Texture; + float m_fontHeight; + int m_spaceSize; +}; + +#endif \ No newline at end of file diff --git a/enginecustom/fontshaderclass.cpp b/enginecustom/fontshaderclass.cpp new file mode 100644 index 0000000..21978f1 --- /dev/null +++ b/enginecustom/fontshaderclass.cpp @@ -0,0 +1,408 @@ +#include "fontshaderclass.h" + + +FontShaderClass::FontShaderClass() +{ + m_vertexShader = 0; + m_pixelShader = 0; + m_layout = 0; + m_matrixBuffer = 0; + m_sampleState = 0; + m_pixelBuffer = 0; +} + + +FontShaderClass::FontShaderClass(const FontShaderClass& other) +{ +} + + +FontShaderClass::~FontShaderClass() +{ +} + + +bool FontShaderClass::Initialize(ID3D11Device* device, HWND hwnd) +{ + bool result; + wchar_t vsFilename[128]; + wchar_t psFilename[128]; + int error; + + // Set the filename of the vertex shader. + error = wcscpy_s(vsFilename, 128, L"font.vs"); + if (error != 0) + { + return false; + } + + // Set the filename of the pixel shader. + error = wcscpy_s(psFilename, 128, L"font.ps"); + if (error != 0) + { + return false; + } + + // Initialize the vertex and pixel shaders. + result = InitializeShader(device, hwnd, vsFilename, psFilename); + if (!result) + { + return false; + } + + return true; +} + +void FontShaderClass::Shutdown() +{ + // Shutdown the vertex and pixel shaders as well as the related objects. + ShutdownShader(); + + return; +} + +bool FontShaderClass::Render(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, + XMMATRIX projectionMatrix, ID3D11ShaderResourceView* texture, XMFLOAT4 pixelColor) +{ + bool result; + + + // Set the shader parameters that it will use for rendering. + result = SetShaderParameters(deviceContext, worldMatrix, viewMatrix, projectionMatrix, texture, pixelColor); + if (!result) + { + return false; + } + + // Now render the prepared buffers with the shader. + RenderShader(deviceContext, indexCount); + + return true; +} + +bool FontShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* vsFilename, WCHAR* psFilename) +{ + HRESULT result; + ID3D10Blob* errorMessage; + ID3D10Blob* vertexShaderBuffer; + ID3D10Blob* pixelShaderBuffer; + D3D11_INPUT_ELEMENT_DESC polygonLayout[2]; + unsigned int numElements; + D3D11_BUFFER_DESC matrixBufferDesc; + D3D11_SAMPLER_DESC samplerDesc; + D3D11_BUFFER_DESC pixelBufferDesc; + + + // Initialize the pointers this function will use to null. + errorMessage = 0; + vertexShaderBuffer = 0; + pixelShaderBuffer = 0; + + // Compile the vertex shader code. + result = D3DCompileFromFile(vsFilename, NULL, NULL, "FontVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, + &vertexShaderBuffer, &errorMessage); + if (FAILED(result)) + { + // If the shader failed to compile it should have writen something to the error message. + if (errorMessage) + { + OutputShaderErrorMessage(errorMessage, hwnd, vsFilename); + } + // If there was nothing in the error message then it simply could not find the shader file itself. + else + { + MessageBox(hwnd, vsFilename, L"Missing Shader File", MB_OK); + } + + return false; + } + + // Compile the pixel shader code. + result = D3DCompileFromFile(psFilename, NULL, NULL, "FontPixelShader", "ps_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, + &pixelShaderBuffer, &errorMessage); + if (FAILED(result)) + { + // If the shader failed to compile it should have writen something to the error message. + if (errorMessage) + { + OutputShaderErrorMessage(errorMessage, hwnd, psFilename); + } + // If there was nothing in the error message then it simply could not find the file itself. + else + { + MessageBox(hwnd, psFilename, L"Missing Shader File", MB_OK); + } + + return false; + } + + // Create the vertex shader from the buffer. + result = device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader); + if (FAILED(result)) + { + return false; + } + + // Create the pixel shader from the buffer. + result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &m_pixelShader); + if (FAILED(result)) + { + return false; + } + + // Create the vertex input layout description. + polygonLayout[0].SemanticName = "POSITION"; + polygonLayout[0].SemanticIndex = 0; + polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT; + polygonLayout[0].InputSlot = 0; + polygonLayout[0].AlignedByteOffset = 0; + polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + polygonLayout[0].InstanceDataStepRate = 0; + + polygonLayout[1].SemanticName = "TEXCOORD"; + polygonLayout[1].SemanticIndex = 0; + polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT; + polygonLayout[1].InputSlot = 0; + polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT; + polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + polygonLayout[1].InstanceDataStepRate = 0; + + // Get a count of the elements in the layout. + numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]); + + // Create the vertex input layout. + result = device->CreateInputLayout(polygonLayout, numElements, vertexShaderBuffer->GetBufferPointer(), + vertexShaderBuffer->GetBufferSize(), &m_layout); + if (FAILED(result)) + { + return false; + } + + // Release the vertex shader buffer and pixel shader buffer since they are no longer needed. + vertexShaderBuffer->Release(); + vertexShaderBuffer = 0; + + pixelShaderBuffer->Release(); + pixelShaderBuffer = 0; + + // Setup the description of the dynamic matrix constant buffer that is in the vertex shader. + matrixBufferDesc.Usage = D3D11_USAGE_DYNAMIC; + matrixBufferDesc.ByteWidth = sizeof(MatrixBufferType); + matrixBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + matrixBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + matrixBufferDesc.MiscFlags = 0; + matrixBufferDesc.StructureByteStride = 0; + + // Create the constant buffer pointer so we can access the vertex shader constant buffer from within this class. + result = device->CreateBuffer(&matrixBufferDesc, NULL, &m_matrixBuffer); + if (FAILED(result)) + { + return false; + } + + // Create a texture sampler state description. + samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; + samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; + samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; + samplerDesc.MipLODBias = 0.0f; + samplerDesc.MaxAnisotropy = 1; + samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; + samplerDesc.BorderColor[0] = 0; + samplerDesc.BorderColor[1] = 0; + samplerDesc.BorderColor[2] = 0; + samplerDesc.BorderColor[3] = 0; + samplerDesc.MinLOD = 0; + samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; + + // Create the texture sampler state. + result = device->CreateSamplerState(&samplerDesc, &m_sampleState); + if (FAILED(result)) + { + return false; + } + + // Setup the description of the dynamic pixel constant buffer that is in the pixel shader. + pixelBufferDesc.Usage = D3D11_USAGE_DYNAMIC; + pixelBufferDesc.ByteWidth = sizeof(PixelBufferType); + pixelBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + pixelBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + pixelBufferDesc.MiscFlags = 0; + pixelBufferDesc.StructureByteStride = 0; + + // Create the pixel constant buffer pointer so we can access the pixel shader constant buffer from within this class. + result = device->CreateBuffer(&pixelBufferDesc, NULL, &m_pixelBuffer); + if (FAILED(result)) + { + return false; + } + + return true; +} + +void FontShaderClass::ShutdownShader() +{ + // Release the pixel constant buffer. + if (m_pixelBuffer) + { + m_pixelBuffer->Release(); + m_pixelBuffer = 0; + } + + // Release the sampler state. + if (m_sampleState) + { + m_sampleState->Release(); + m_sampleState = 0; + } + + // Release the matrix constant buffer. + if (m_matrixBuffer) + { + m_matrixBuffer->Release(); + m_matrixBuffer = 0; + } + + // Release the layout. + if (m_layout) + { + m_layout->Release(); + m_layout = 0; + } + + // Release the pixel shader. + if (m_pixelShader) + { + m_pixelShader->Release(); + m_pixelShader = 0; + } + + // Release the vertex shader. + if (m_vertexShader) + { + m_vertexShader->Release(); + m_vertexShader = 0; + } + + return; +} + +void FontShaderClass::OutputShaderErrorMessage(ID3D10Blob* errorMessage, HWND hwnd, WCHAR* shaderFilename) +{ + char* compileErrors; + unsigned long long bufferSize, i; + ofstream fout; + + + // Get a pointer to the error message text buffer. + compileErrors = (char*)(errorMessage->GetBufferPointer()); + + // Get the length of the message. + bufferSize = errorMessage->GetBufferSize(); + + // Open a file to write the error message to. + fout.open("shader-error.txt"); + + // Write out the error message. + for (i = 0; i < bufferSize; i++) + { + fout << compileErrors[i]; + } + + // Close the file. + fout.close(); + + // Release the error message. + errorMessage->Release(); + errorMessage = 0; + + // Pop a message up on the screen to notify the user to check the text file for compile errors. + MessageBox(hwnd, L"Error compiling shader. Check shader-error.txt for message.", shaderFilename, MB_OK); + + return; +} + +bool FontShaderClass::SetShaderParameters(ID3D11DeviceContext* deviceContext, XMMATRIX worldMatrix, XMMATRIX viewMatrix, + XMMATRIX projectionMatrix, ID3D11ShaderResourceView* texture, XMFLOAT4 pixelColor) +{ + HRESULT result; + D3D11_MAPPED_SUBRESOURCE mappedResource; + MatrixBufferType* dataPtr; + unsigned int bufferNumber; + PixelBufferType* dataPtr2; + + + // Transpose the matrices to prepare them for the shader. + worldMatrix = XMMatrixTranspose(worldMatrix); + viewMatrix = XMMatrixTranspose(viewMatrix); + projectionMatrix = XMMatrixTranspose(projectionMatrix); + + // Lock the constant buffer so it can be written to. + result = deviceContext->Map(m_matrixBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + if (FAILED(result)) + { + return false; + } + + // Get a pointer to the data in the constant buffer. + dataPtr = (MatrixBufferType*)mappedResource.pData; + + // Copy the matrices into the constant buffer. + dataPtr->world = worldMatrix; + dataPtr->view = viewMatrix; + dataPtr->projection = projectionMatrix; + + // Unlock the constant buffer. + deviceContext->Unmap(m_matrixBuffer, 0); + + // Set the position of the constant buffer in the vertex shader. + bufferNumber = 0; + + // Finally set the constant buffer in the vertex shader with the updated values. + deviceContext->VSSetConstantBuffers(bufferNumber, 1, &m_matrixBuffer); + + // Set shader texture resource in the pixel shader. + deviceContext->PSSetShaderResources(0, 1, &texture); + + // Lock the pixel constant buffer so it can be written to. + result = deviceContext->Map(m_pixelBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + if (FAILED(result)) + { + return false; + } + + // Get a pointer to the data in the pixel constant buffer. + dataPtr2 = (PixelBufferType*)mappedResource.pData; + + // Copy the pixel color into the pixel constant buffer. + dataPtr2->pixelColor = pixelColor; + + // Unlock the pixel constant buffer. + deviceContext->Unmap(m_pixelBuffer, 0); + + // Set the position of the pixel constant buffer in the pixel shader. + bufferNumber = 0; + + // Now set the pixel constant buffer in the pixel shader with the updated value. + deviceContext->PSSetConstantBuffers(bufferNumber, 1, &m_pixelBuffer); + + return true; +} + +void FontShaderClass::RenderShader(ID3D11DeviceContext* deviceContext, int indexCount) +{ + // Set the vertex input layout. + deviceContext->IASetInputLayout(m_layout); + + // Set the vertex and pixel shaders that will be used to render this triangle. + deviceContext->VSSetShader(m_vertexShader, NULL, 0); + deviceContext->PSSetShader(m_pixelShader, NULL, 0); + + // Set the sampler state in the pixel shader. + deviceContext->PSSetSamplers(0, 1, &m_sampleState); + + // Render the triangle. + deviceContext->DrawIndexed(indexCount, 0, 0); + + return; +} \ No newline at end of file diff --git a/enginecustom/fontshaderclass.h b/enginecustom/fontshaderclass.h new file mode 100644 index 0000000..8a0221d --- /dev/null +++ b/enginecustom/fontshaderclass.h @@ -0,0 +1,60 @@ +#ifndef _FONTSHADERCLASS_H_ +#define _FONTSHADERCLASS_H_ + + +////////////// +// INCLUDES // +////////////// +#include +#include +#include +#include +using namespace DirectX; +using namespace std; + + +//////////////////////////////////////////////////////////////////////////////// +// Class name: FontShaderClass +//////////////////////////////////////////////////////////////////////////////// +class FontShaderClass +{ +private: + struct MatrixBufferType + { + XMMATRIX world; + XMMATRIX view; + XMMATRIX projection; + }; + + struct PixelBufferType + { + XMFLOAT4 pixelColor; + }; + +public: + FontShaderClass(); + FontShaderClass(const FontShaderClass&); + ~FontShaderClass(); + + bool Initialize(ID3D11Device*, HWND); + void Shutdown(); + bool Render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4); + +private: + bool InitializeShader(ID3D11Device*, HWND, WCHAR*, WCHAR*); + void ShutdownShader(); + void OutputShaderErrorMessage(ID3D10Blob*, HWND, WCHAR*); + + bool SetShaderParameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4); + void RenderShader(ID3D11DeviceContext*, int); + +private: + ID3D11VertexShader* m_vertexShader; + ID3D11PixelShader* m_pixelShader; + ID3D11InputLayout* m_layout; + ID3D11Buffer* m_matrixBuffer; + ID3D11SamplerState* m_sampleState; + ID3D11Buffer* m_pixelBuffer; +}; + +#endif \ No newline at end of file diff --git a/enginecustom/fpsclass.cpp b/enginecustom/fpsclass.cpp new file mode 100644 index 0000000..ac24c3e --- /dev/null +++ b/enginecustom/fpsclass.cpp @@ -0,0 +1,46 @@ +#include "fpsclass.h" + + +FpsClass::FpsClass() +{ +} + + +FpsClass::FpsClass(const FpsClass& other) +{ +} + + +FpsClass::~FpsClass() +{ +} + +void FpsClass::Initialize() +{ + m_fps = 0; + m_count = 0; + + m_startTime = timeGetTime(); + + return; +} + +void FpsClass::Frame() +{ + m_count++; + + if (timeGetTime() >= (m_startTime + 1000)) + { + m_fps = m_count; + m_count = 0; + + m_startTime = timeGetTime(); + } + + return; +} + +int FpsClass::GetFps() +{ + return m_fps; +} \ No newline at end of file diff --git a/enginecustom/fpsclass.h b/enginecustom/fpsclass.h new file mode 100644 index 0000000..af3451b --- /dev/null +++ b/enginecustom/fpsclass.h @@ -0,0 +1,36 @@ +#ifndef _FPSCLASS_H_ +#define _FPSCLASS_H_ + + +///////////// +// LINKING // +///////////// +#pragma comment(lib, "winmm.lib") + + +////////////// +// INCLUDES // +////////////// +#include +#include + +//////////////////////////////////////////////////////////////////////////////// +// Class name: FpsClass +//////////////////////////////////////////////////////////////////////////////// +class FpsClass +{ +public: + FpsClass(); + FpsClass(const FpsClass&); + ~FpsClass(); + + void Initialize(); + void Frame(); + int GetFps(); + +private: + int m_fps, m_count; + unsigned long m_startTime; +}; + +#endif \ No newline at end of file diff --git a/enginecustom/light.ps b/enginecustom/light.ps index ebf43d7..7941e19 100644 --- a/enginecustom/light.ps +++ b/enginecustom/light.ps @@ -2,6 +2,10 @@ // Filename: light.ps //////////////////////////////////////////////////////////////////////////////// +///////////// +// DEFINES // +///////////// +#define NUM_LIGHTS 4 ///////////// // GLOBALS // @@ -11,13 +15,17 @@ SamplerState SampleType : register(s0); cbuffer LightBuffer { float4 ambientColor; - float4 diffuseColor; float3 lightDirection; float padding; float specularPower; float4 specularColor; }; +cbuffer LightColorBuffer +{ + float4 diffuseColor[NUM_LIGHTS]; +}; + ////////////// // TYPEDEFS // @@ -27,7 +35,7 @@ struct PixelInputType float4 position : SV_POSITION; float2 tex : TEXCOORD0; float3 normal : NORMAL; - float3 viewDirection : TEXCOORD1; + float3 lightPos[NUM_LIGHTS] : TEXCOORD1; }; @@ -38,48 +46,39 @@ float4 LightPixelShader(PixelInputType input) : SV_TARGET { float4 textureColor; float3 lightDir; - float lightIntensity; float4 color; float3 reflection; float4 specular; - + float lightIntensity[NUM_LIGHTS]; + float4 colorArray[NUM_LIGHTS]; + float4 colorSum; + int i; // Sample the pixel color from the texture using the sampler at this texture coordinate location. textureColor = shaderTexture.Sample(SampleType, input.tex); - // Set the default output color to the ambient light value for all pixels. - color = ambientColor; - - // Initialize the specular color. - specular = float4(0.0f, 0.0f, 0.0f, 0.0f); - - - // Invert the light direction for calculations. - lightDir = -lightDirection; - - // Calculate the amount of light on this pixel. - lightIntensity = saturate(dot(input.normal, lightDir)); - - if(lightIntensity > 0.0f) + for(i=0; iCreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader); + if (FAILED(result)) + { + return false; + } + + // Create the pixel shader from the buffer. + result = device->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &m_pixelShader); + if (FAILED(result)) + { + return false; + } + + // Create the vertex input layout description. + polygonLayout[0].SemanticName = "POSITION"; + polygonLayout[0].SemanticIndex = 0; + polygonLayout[0].Format = DXGI_FORMAT_R32G32B32_FLOAT; + polygonLayout[0].InputSlot = 0; + polygonLayout[0].AlignedByteOffset = 0; + polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + polygonLayout[0].InstanceDataStepRate = 0; + + polygonLayout[1].SemanticName = "TEXCOORD"; + polygonLayout[1].SemanticIndex = 0; + polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT; + polygonLayout[1].InputSlot = 0; + polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT; + polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + polygonLayout[1].InstanceDataStepRate = 0; + + polygonLayout[2].SemanticName = "NORMAL"; + polygonLayout[2].SemanticIndex = 0; + polygonLayout[2].Format = DXGI_FORMAT_R32G32B32_FLOAT; + polygonLayout[2].InputSlot = 0; + polygonLayout[2].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT; + polygonLayout[2].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + polygonLayout[2].InstanceDataStepRate = 0; + + // Get a count of the elements in the layout. + numElements = sizeof(polygonLayout) / sizeof(polygonLayout[0]); + + // Create the vertex input layout. + result = device->CreateInputLayout(polygonLayout, numElements, vertexShaderBuffer->GetBufferPointer(), + vertexShaderBuffer->GetBufferSize(), &m_layout); + if (FAILED(result)) + { + return false; + } + + // Release the vertex shader buffer and pixel shader buffer since they are no longer needed. + vertexShaderBuffer->Release(); + vertexShaderBuffer = 0; + + pixelShaderBuffer->Release(); + pixelShaderBuffer = 0; + + // Setup the description of the dynamic matrix constant buffer that is in the vertex shader. + matrixBufferDesc.Usage = D3D11_USAGE_DYNAMIC; + matrixBufferDesc.ByteWidth = sizeof(MatrixBufferType); + matrixBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + matrixBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + matrixBufferDesc.MiscFlags = 0; + matrixBufferDesc.StructureByteStride = 0; + + // Create the constant buffer pointer so we can access the vertex shader constant buffer from within this class. + result = device->CreateBuffer(&matrixBufferDesc, NULL, &m_matrixBuffer); + if (FAILED(result)) + { + return false; + } + + // Create a texture sampler state description. + samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; + samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; + samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; + samplerDesc.MipLODBias = 0.0f; + samplerDesc.MaxAnisotropy = 1; + samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; + samplerDesc.BorderColor[0] = 0; + samplerDesc.BorderColor[1] = 0; + samplerDesc.BorderColor[2] = 0; + samplerDesc.BorderColor[3] = 0; + samplerDesc.MinLOD = 0; + samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; + + // Create the texture sampler state. + result = device->CreateSamplerState(&samplerDesc, &m_sampleState); + if (FAILED(result)) + { + return false; + } + + return true; +} + + +void LightMapShaderClass::ShutdownShader() +{ + // Release the sampler state. + if (m_sampleState) + { + m_sampleState->Release(); + m_sampleState = 0; + } + + // Release the matrix constant buffer. + if (m_matrixBuffer) + { + m_matrixBuffer->Release(); + m_matrixBuffer = 0; + } + + // Release the layout. + if (m_layout) + { + m_layout->Release(); + m_layout = 0; + } + + // Release the pixel shader. + if (m_pixelShader) + { + m_pixelShader->Release(); + m_pixelShader = 0; + } + + // Release the vertex shader. + if (m_vertexShader) + { + m_vertexShader->Release(); + m_vertexShader = 0; + } + + return; +} + + +void LightMapShaderClass::OutputShaderErrorMessage(ID3D10Blob* errorMessage, HWND hwnd, WCHAR* shaderFilename) +{ + char* compileErrors; + unsigned long long bufferSize, i; + ofstream fout; + + + // Get a pointer to the error message text buffer. + compileErrors = (char*)(errorMessage->GetBufferPointer()); + + // Get the length of the message. + bufferSize = errorMessage->GetBufferSize(); + + // Open a file to write the error message to. + fout.open("shader-error.txt"); + + // Write out the error message. + for (i = 0; i < bufferSize; i++) + { + fout << compileErrors[i]; + } + + // Close the file. + fout.close(); + + // Release the error message. + errorMessage->Release(); + errorMessage = 0; + + // Pop a message up on the screen to notify the user to check the text file for compile errors. + MessageBox(hwnd, L"Error compiling shader. Check shader-error.txt for message.", shaderFilename, MB_OK); + + return; +} + + +bool LightMapShaderClass::SetShaderParameters(ID3D11DeviceContext* deviceContext, XMMATRIX worldMatrix, XMMATRIX viewMatrix, + XMMATRIX projectionMatrix, ID3D11ShaderResourceView* texture1, ID3D11ShaderResourceView* texture2) +{ + HRESULT result; + D3D11_MAPPED_SUBRESOURCE mappedResource; + MatrixBufferType* dataPtr; + unsigned int bufferNumber; + + + // Transpose the matrices to prepare them for the shader. + worldMatrix = XMMatrixTranspose(worldMatrix); + viewMatrix = XMMatrixTranspose(viewMatrix); + projectionMatrix = XMMatrixTranspose(projectionMatrix); + + // Lock the constant buffer so it can be written to. + result = deviceContext->Map(m_matrixBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + if (FAILED(result)) + { + return false; + } + + // Get a pointer to the data in the constant buffer. + dataPtr = (MatrixBufferType*)mappedResource.pData; + + // Copy the matrices into the constant buffer. + dataPtr->world = worldMatrix; + dataPtr->view = viewMatrix; + dataPtr->projection = projectionMatrix; + + // Unlock the constant buffer. + deviceContext->Unmap(m_matrixBuffer, 0); + + // Set the position of the constant buffer in the vertex shader. + bufferNumber = 0; + + // Finally set the constant buffer in the vertex shader with the updated values. + deviceContext->VSSetConstantBuffers(bufferNumber, 1, &m_matrixBuffer); + + // Set shader texture resources in the pixel shader. + deviceContext->PSSetShaderResources(0, 1, &texture1); + deviceContext->PSSetShaderResources(1, 1, &texture2); + + return true; +} + + +void LightMapShaderClass::RenderShader(ID3D11DeviceContext* deviceContext, int indexCount) +{ + // Set the vertex input layout. + deviceContext->IASetInputLayout(m_layout); + + // Set the vertex and pixel shaders that will be used to render this triangle. + deviceContext->VSSetShader(m_vertexShader, NULL, 0); + deviceContext->PSSetShader(m_pixelShader, NULL, 0); + + // Set the sampler state in the pixel shader. + deviceContext->PSSetSamplers(0, 1, &m_sampleState); + + // Render the triangle. + deviceContext->DrawIndexed(indexCount, 0, 0); + + return; +} diff --git a/enginecustom/lightmapshaderclass.h b/enginecustom/lightmapshaderclass.h new file mode 100644 index 0000000..0e3d32b --- /dev/null +++ b/enginecustom/lightmapshaderclass.h @@ -0,0 +1,55 @@ +//////////////////////////////////////////////////////////////////////////////// +#ifndef _LIGHTMAPSHADERCLASS_H_ +#define _LIGHTMAPSHADERCLASS_H_ + + +////////////// +// INCLUDES // +////////////// +#include +#include +#include +#include +using namespace DirectX; +using namespace std; + + +//////////////////////////////////////////////////////////////////////////////// +// Class name: LightMapShaderClass +//////////////////////////////////////////////////////////////////////////////// +class LightMapShaderClass +{ +private: + struct MatrixBufferType + { + XMMATRIX world; + XMMATRIX view; + XMMATRIX projection; + }; + +public: + LightMapShaderClass(); + LightMapShaderClass(const LightMapShaderClass&); + ~LightMapShaderClass(); + + bool Initialize(ID3D11Device*, HWND); + void Shutdown(); + bool Render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*); + +private: + bool InitializeShader(ID3D11Device*, HWND, WCHAR*, WCHAR*); + void ShutdownShader(); + void OutputShaderErrorMessage(ID3D10Blob*, HWND, WCHAR*); + + bool SetShaderParameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, ID3D11ShaderResourceView*); + void RenderShader(ID3D11DeviceContext*, int); + +private: + ID3D11VertexShader* m_vertexShader; + ID3D11PixelShader* m_pixelShader; + ID3D11InputLayout* m_layout; + ID3D11Buffer* m_matrixBuffer; + ID3D11SamplerState* m_sampleState; +}; + +#endif \ No newline at end of file diff --git a/enginecustom/lightshaderclass.cpp b/enginecustom/lightshaderclass.cpp index 43fe2bc..392cdac 100644 --- a/enginecustom/lightshaderclass.cpp +++ b/enginecustom/lightshaderclass.cpp @@ -13,6 +13,8 @@ LightShaderClass::LightShaderClass() m_matrixBuffer = 0; m_cameraBuffer = 0; m_lightBuffer = 0; + m_lightColorBuffer = 0; + m_lightPositionBuffer = 0; } @@ -66,15 +68,13 @@ void LightShaderClass::Shutdown() } bool LightShaderClass::Render(ID3D11DeviceContext* deviceContext, int indexCount, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, - ID3D11ShaderResourceView* texture, XMFLOAT3 lightDirection, XMFLOAT4 ambientColor, XMFLOAT4 diffuseColor, - XMFLOAT3 cameraPosition, XMFLOAT4 specularColor, float specularPower) + ID3D11ShaderResourceView* texture, XMFLOAT4 diffuseColor[], XMFLOAT4 lightPosition[]) { bool result; // Set the shader parameters that it will use for rendering. - result = SetShaderParameters(deviceContext, worldMatrix, viewMatrix, projectionMatrix, texture, lightDirection, ambientColor, diffuseColor, - cameraPosition, specularColor, specularPower); + result = SetShaderParameters(deviceContext, worldMatrix, viewMatrix, projectionMatrix, texture, diffuseColor, lightPosition); if(!result) { return false; @@ -98,7 +98,8 @@ bool LightShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* D3D11_SAMPLER_DESC samplerDesc; D3D11_BUFFER_DESC matrixBufferDesc; D3D11_BUFFER_DESC cameraBufferDesc; - D3D11_BUFFER_DESC lightBufferDesc; + D3D11_BUFFER_DESC lightColorBufferDesc; + D3D11_BUFFER_DESC lightPositionBufferDesc; // Initialize the pointers this function will use to null. @@ -237,6 +238,8 @@ bool LightShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* return false; } + + // Setup the description of the camera dynamic constant buffer that is in the vertex shader. cameraBufferDesc.Usage = D3D11_USAGE_DYNAMIC; cameraBufferDesc.ByteWidth = sizeof(CameraBufferType); @@ -252,17 +255,31 @@ bool LightShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* return false; } - // Setup the description of the light dynamic constant buffer that is in the pixel shader. - // Note that ByteWidth always needs to be a multiple of 16 if using D3D11_BIND_CONSTANT_BUFFER or CreateBuffer will fail. - lightBufferDesc.Usage = D3D11_USAGE_DYNAMIC; - lightBufferDesc.ByteWidth = sizeof(LightBufferType) + 12 ; - lightBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; - lightBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - lightBufferDesc.MiscFlags = 0; - lightBufferDesc.StructureByteStride = 0; + // Setup the description of the dynamic constant buffer that is in the pixel shader. + lightColorBufferDesc.Usage = D3D11_USAGE_DYNAMIC; + lightColorBufferDesc.ByteWidth = sizeof(LightColorBufferType); + lightColorBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + lightColorBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + lightColorBufferDesc.MiscFlags = 0; + lightColorBufferDesc.StructureByteStride = 0; + + // Create the constant buffer pointer so we can access the pixel shader constant buffer from within this class. + result = device->CreateBuffer(&lightColorBufferDesc, NULL, &m_lightColorBuffer); + if (FAILED(result)) + { + return false; + } + + // Setup the description of the dynamic constant buffer that is in the vertex shader. + lightPositionBufferDesc.Usage = D3D11_USAGE_DYNAMIC; + lightPositionBufferDesc.ByteWidth = sizeof(LightPositionBufferType); + lightPositionBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + lightPositionBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + lightPositionBufferDesc.MiscFlags = 0; + lightPositionBufferDesc.StructureByteStride = 0; // Create the constant buffer pointer so we can access the vertex shader constant buffer from within this class. - result = device->CreateBuffer(&lightBufferDesc, NULL, &m_lightBuffer); + result = device->CreateBuffer(&lightPositionBufferDesc, NULL, &m_lightPositionBuffer); if (FAILED(result)) { return false; @@ -274,6 +291,19 @@ bool LightShaderClass::InitializeShader(ID3D11Device* device, HWND hwnd, WCHAR* void LightShaderClass::ShutdownShader() { + // Release the light constant buffers. + if (m_lightColorBuffer) + { + m_lightColorBuffer->Release(); + m_lightColorBuffer = 0; + } + + if (m_lightPositionBuffer) + { + m_lightPositionBuffer->Release(); + m_lightPositionBuffer = 0; + } + // Release the light constant buffer. if (m_lightBuffer) { @@ -364,15 +394,14 @@ void LightShaderClass::OutputShaderErrorMessage(ID3D10Blob* errorMessage, HWND h bool LightShaderClass::SetShaderParameters(ID3D11DeviceContext* deviceContext, XMMATRIX worldMatrix, XMMATRIX viewMatrix, XMMATRIX projectionMatrix, - ID3D11ShaderResourceView* texture, XMFLOAT3 lightDirection, XMFLOAT4 ambientColor, XMFLOAT4 diffuseColor, - XMFLOAT3 cameraPosition, XMFLOAT4 specularColor, float specularPower) + ID3D11ShaderResourceView* texture, XMFLOAT4 diffuseColor[], XMFLOAT4 lightPosition[]) { HRESULT result; D3D11_MAPPED_SUBRESOURCE mappedResource; unsigned int bufferNumber; MatrixBufferType* dataPtr; - LightBufferType* dataPtr2; - CameraBufferType* dataPtr3; + LightPositionBufferType* dataPtr2; + LightColorBufferType* dataPtr3; // Transpose the matrices to prepare them for the shader. worldMatrix = XMMatrixTranspose(worldMatrix); @@ -410,51 +439,59 @@ bool LightShaderClass::SetShaderParameters(ID3D11DeviceContext* deviceContext, X return false; } - // Get a pointer to the data in the constant buffer. - dataPtr3 = (CameraBufferType*)mappedResource.pData; - - // Copy the camera position into the constant buffer. - dataPtr3->cameraPosition = cameraPosition; - dataPtr3->padding = 0.0f; - - // Unlock the camera constant buffer. - deviceContext->Unmap(m_cameraBuffer, 0); - - // Set the position of the camera constant buffer in the vertex shader. - bufferNumber = 1; - - // Now set the camera constant buffer in the vertex shader with the updated values. - deviceContext->VSSetConstantBuffers(bufferNumber, 1, &m_cameraBuffer); - - // Set shader texture resource in the pixel shader. - deviceContext->PSSetShaderResources(0, 1, &texture); - - // Lock the light constant buffer so it can be written to. - result = deviceContext->Map(m_lightBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + // Lock the light position constant buffer so it can be written to. + result = deviceContext->Map(m_lightPositionBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); if (FAILED(result)) { return false; } // Get a pointer to the data in the constant buffer. - dataPtr2 = (LightBufferType*)mappedResource.pData; + dataPtr2 = (LightPositionBufferType*)mappedResource.pData; - // Copy the lighting variables into the constant buffer. - dataPtr2->ambientColor = ambientColor; - dataPtr2->diffuseColor = diffuseColor; - dataPtr2->lightDirection = lightDirection; - dataPtr2->specularColor = specularColor; - dataPtr2->specularPower = specularPower; - //dataPtr2->padding = 0.0f; + // Copy the light position variables into the constant buffer. + dataPtr2->lightPosition[0] = lightPosition[0]; + dataPtr2->lightPosition[1] = lightPosition[1]; + dataPtr2->lightPosition[2] = lightPosition[2]; + dataPtr2->lightPosition[3] = lightPosition[3]; // Unlock the constant buffer. - deviceContext->Unmap(m_lightBuffer, 0); + deviceContext->Unmap(m_lightPositionBuffer, 0); - // Set the position of the light constant buffer in the pixel shader. + // Set the position of the constant buffer in the vertex shader. + bufferNumber = 1; + + // Finally set the constant buffer in the vertex shader with the updated values. + deviceContext->VSSetConstantBuffers(bufferNumber, 1, &m_lightPositionBuffer); + + // Set shader texture resource in the pixel shader. + deviceContext->PSSetShaderResources(0, 1, &texture); + + // Lock the light color constant buffer so it can be written to. + result = deviceContext->Map(m_lightColorBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + if (FAILED(result)) + { + return false; + } + + // Get a pointer to the data in the constant buffer. + dataPtr3 = (LightColorBufferType*)mappedResource.pData; + + // Copy the light color variables into the constant buffer. + dataPtr3->diffuseColor[0] = diffuseColor[0]; + dataPtr3->diffuseColor[1] = diffuseColor[1]; + dataPtr3->diffuseColor[2] = diffuseColor[2]; + dataPtr3->diffuseColor[3] = diffuseColor[3]; + + // Unlock the constant buffer. + deviceContext->Unmap(m_lightColorBuffer, 0); + + // Set the position of the constant buffer in the pixel shader. bufferNumber = 0; - // Finally set the light constant buffer in the pixel shader with the updated values. - deviceContext->PSSetConstantBuffers(bufferNumber, 1, &m_lightBuffer); + // Finally set the constant buffer in the pixel shader with the updated values. + deviceContext->PSSetConstantBuffers(bufferNumber, 1, &m_lightColorBuffer); + return true; } diff --git a/enginecustom/lightshaderclass.h b/enginecustom/lightshaderclass.h index c256012..8e338b3 100644 --- a/enginecustom/lightshaderclass.h +++ b/enginecustom/lightshaderclass.h @@ -5,6 +5,11 @@ #define _LIGHTSHADERCLASS_H_ +///////////// +// GLOBALS // +///////////// +const int NUM_LIGHTS = 4; + ////////////// // INCLUDES // ////////////// @@ -45,6 +50,16 @@ private: XMFLOAT4 specularColor; }; + struct LightColorBufferType + { + XMFLOAT4 diffuseColor[NUM_LIGHTS]; + }; + + struct LightPositionBufferType + { + XMFLOAT4 lightPosition[NUM_LIGHTS]; + }; + public: LightShaderClass(); LightShaderClass(const LightShaderClass&); @@ -52,14 +67,14 @@ public: bool Initialize(ID3D11Device*, HWND); void Shutdown(); - bool Render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT3, XMFLOAT4, XMFLOAT4, XMFLOAT3, XMFLOAT4, float); + bool Render(ID3D11DeviceContext*, int, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4[], XMFLOAT4[]); private: bool InitializeShader(ID3D11Device*, HWND, WCHAR*, WCHAR*); void ShutdownShader(); void OutputShaderErrorMessage(ID3D10Blob*, HWND, WCHAR*); - bool SetShaderParameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT3, XMFLOAT4, XMFLOAT4, XMFLOAT3, XMFLOAT4, float); + bool SetShaderParameters(ID3D11DeviceContext*, XMMATRIX, XMMATRIX, XMMATRIX, ID3D11ShaderResourceView*, XMFLOAT4[], XMFLOAT4[]); void RenderShader(ID3D11DeviceContext*, int); private: @@ -70,6 +85,8 @@ private: ID3D11Buffer* m_matrixBuffer; ID3D11Buffer* m_cameraBuffer; ID3D11Buffer* m_lightBuffer; + ID3D11Buffer* m_lightColorBuffer; + ID3D11Buffer* m_lightPositionBuffer; }; #endif \ No newline at end of file diff --git a/enginecustom/modelclass.cpp b/enginecustom/modelclass.cpp index 8cc6963..122183e 100644 --- a/enginecustom/modelclass.cpp +++ b/enginecustom/modelclass.cpp @@ -19,7 +19,8 @@ ModelClass::~ModelClass() { } -bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* modelFilename, char* textureFilename1, char* textureFilename2) +bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* modelFilename, char* textureFilename1, char* textureFilename2, + char* textureFilename3) { bool result; @@ -37,7 +38,7 @@ bool ModelClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceCon return false; } // Load the textures for this model. - result = LoadTextures(device, deviceContext, textureFilename1, textureFilename2); + result = LoadTextures(device, deviceContext, textureFilename1, textureFilename2, textureFilename3); if (!result) { return false; @@ -200,13 +201,13 @@ void ModelClass::RenderBuffers(ID3D11DeviceContext* deviceContext) return; } -bool ModelClass::LoadTextures(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* filename1, char* filename2) +bool ModelClass::LoadTextures(ID3D11Device* device, ID3D11DeviceContext* deviceContext, char* filename1, char* filename2, char* filename3) { bool result; // Create and initialize the texture object array. - m_Textures = new TextureClass[2]; + m_Textures = new TextureClass[3]; result = m_Textures[0].Initialize(device, deviceContext, filename1); if (!result) @@ -220,6 +221,13 @@ bool ModelClass::LoadTextures(ID3D11Device* device, ID3D11DeviceContext* deviceC return false; } + result = m_Textures[2].Initialize(device, deviceContext, filename3); + if (!result) + { + return false; + } + + return true; } @@ -230,6 +238,7 @@ void ModelClass::ReleaseTextures() { m_Textures[0].Shutdown(); m_Textures[1].Shutdown(); + m_Textures[2].Shutdown(); delete[] m_Textures; m_Textures = 0; diff --git a/enginecustom/modelclass.h b/enginecustom/modelclass.h index 5c97330..fb2450a 100644 --- a/enginecustom/modelclass.h +++ b/enginecustom/modelclass.h @@ -64,7 +64,7 @@ public: ModelClass(const ModelClass&); ~ModelClass(); - bool Initialize(ID3D11Device*, ID3D11DeviceContext*, char*, char*, char*); + bool Initialize(ID3D11Device*, ID3D11DeviceContext*, char*, char*, char*, char*); void Shutdown(); void Render(ID3D11DeviceContext*); @@ -75,7 +75,7 @@ private: bool InitializeBuffers(ID3D11Device*); void ShutdownBuffers(); void RenderBuffers(ID3D11DeviceContext*); - bool LoadTextures(ID3D11Device*, ID3D11DeviceContext*, char*, char*); + bool LoadTextures(ID3D11Device*, ID3D11DeviceContext*, char*, char*, char*); void ReleaseTextures(); bool LoadModel(char*); diff --git a/enginecustom/plane.txt b/enginecustom/plane.txt new file mode 100644 index 0000000..18bf5d2 --- /dev/null +++ b/enginecustom/plane.txt @@ -0,0 +1,3754 @@ +Vertex Count: 3750 + +Data: + +-5 -0 -4.6 0 0.96 0 1 -0 +-4.6 -0 -5 0.04 1 0 1 -0 +-5 -0 -5 0 1 0 1 -0 +-4.6 -0 -4.6 0.04 0.96 0 1 -0 +-4.6 -0 -5 0.04 1 0 1 -0 +-5 -0 -4.6 0 0.96 0 1 -0 +-4.6 -0 -4.6 0.04 0.96 0 1 -0 +-4.2 -0 -5 0.08 1 0 1 -0 +-4.6 -0 -5 0.04 1 0 1 -0 +-4.2 -0 -4.6 0.08 0.96 0 1 -0 +-4.2 -0 -5 0.08 1 0 1 -0 +-4.6 -0 -4.6 0.04 0.96 0 1 -0 +-4.2 -0 -4.6 0.08 0.96 0 1 -0 +-3.8 -0 -5 0.12 1 0 1 -0 +-4.2 -0 -5 0.08 1 0 1 -0 +-3.8 -0 -4.6 0.12 0.96 0 1 -0 +-3.8 -0 -5 0.12 1 0 1 -0 +-4.2 -0 -4.6 0.08 0.96 0 1 -0 +-3.8 -0 -4.6 0.12 0.96 0 1 -0 +-3.4 -0 -5 0.16 1 0 1 -0 +-3.8 -0 -5 0.12 1 0 1 -0 +-3.4 -0 -4.6 0.16 0.96 0 1 -0 +-3.4 -0 -5 0.16 1 0 1 -0 +-3.8 -0 -4.6 0.12 0.96 0 1 -0 +-3.4 -0 -4.6 0.16 0.96 0 1 -0 +-3 -0 -5 0.2 1 0 1 -0 +-3.4 -0 -5 0.16 1 0 1 -0 +-3 -0 -4.6 0.2 0.96 0 1 -0 +-3 -0 -5 0.2 1 0 1 -0 +-3.4 -0 -4.6 0.16 0.96 0 1 -0 +-3 -0 -4.6 0.2 0.96 0 1 -0 +-2.6 -0 -5 0.24 1 0 1 -0 +-3 -0 -5 0.2 1 0 1 -0 +-2.6 -0 -4.6 0.24 0.96 0 1 -0 +-2.6 -0 -5 0.24 1 0 1 -0 +-3 -0 -4.6 0.2 0.96 0 1 -0 +-2.6 -0 -4.6 0.24 0.96 0 1 -0 +-2.2 -0 -5 0.28 1 0 1 -0 +-2.6 -0 -5 0.24 1 0 1 -0 +-2.2 -0 -4.6 0.28 0.96 0 1 -0 +-2.2 -0 -5 0.28 1 0 1 -0 +-2.6 -0 -4.6 0.24 0.96 0 1 -0 +-2.2 -0 -4.6 0.28 0.96 0 1 -0 +-1.8 -0 -5 0.32 1 0 1 -0 +-2.2 -0 -5 0.28 1 0 1 -0 +-1.8 -0 -4.6 0.32 0.96 0 1 -0 +-1.8 -0 -5 0.32 1 0 1 -0 +-2.2 -0 -4.6 0.28 0.96 0 1 -0 +-1.8 -0 -4.6 0.32 0.96 0 1 -0 +-1.4 -0 -5 0.36 1 0 1 -0 +-1.8 -0 -5 0.32 1 0 1 -0 +-1.4 -0 -4.6 0.36 0.96 0 1 -0 +-1.4 -0 -5 0.36 1 0 1 -0 +-1.8 -0 -4.6 0.32 0.96 0 1 -0 +-1.4 -0 -4.6 0.36 0.96 0 1 -0 +-1 -0 -5 0.4 1 0 1 -0 +-1.4 -0 -5 0.36 1 0 1 -0 +-1 -0 -4.6 0.4 0.96 0 1 -0 +-1 -0 -5 0.4 1 0 1 -0 +-1.4 -0 -4.6 0.36 0.96 0 1 -0 +-1 -0 -4.6 0.4 0.96 0 1 -0 +-0.6 -0 -5 0.44 1 0 1 -0 +-1 -0 -5 0.4 1 0 1 -0 +-0.6 -0 -4.6 0.44 0.96 0 1 -0 +-0.6 -0 -5 0.44 1 0 1 -0 +-1 -0 -4.6 0.4 0.96 0 1 -0 +-0.6 -0 -4.6 0.44 0.96 0 1 -0 +-0.2 -0 -5 0.48 1 0 1 -0 +-0.6 -0 -5 0.44 1 0 1 -0 +-0.2 -0 -4.6 0.48 0.96 0 1 -0 +-0.2 -0 -5 0.48 1 0 1 -0 +-0.6 -0 -4.6 0.44 0.96 0 1 -0 +-0.2 -0 -4.6 0.48 0.96 0 1 -0 +0.2 -0 -5 0.52 1 0 1 -0 +-0.2 -0 -5 0.48 1 0 1 -0 +0.2 -0 -4.6 0.52 0.96 0 1 -0 +0.2 -0 -5 0.52 1 0 1 -0 +-0.2 -0 -4.6 0.48 0.96 0 1 -0 +0.2 -0 -4.6 0.52 0.96 0 1 -0 +0.6 -0 -5 0.56 1 0 1 -0 +0.2 -0 -5 0.52 1 0 1 -0 +0.6 -0 -4.6 0.56 0.96 0 1 -0 +0.6 -0 -5 0.56 1 0 1 -0 +0.2 -0 -4.6 0.52 0.96 0 1 -0 +0.6 -0 -4.6 0.56 0.96 0 1 -0 +1 -0 -5 0.6 1 0 1 -0 +0.6 -0 -5 0.56 1 0 1 -0 +1 -0 -4.6 0.6 0.96 0 1 -0 +1 -0 -5 0.6 1 0 1 -0 +0.6 -0 -4.6 0.56 0.96 0 1 -0 +1 -0 -4.6 0.6 0.96 0 1 -0 +1.4 -0 -5 0.64 1 0 1 -0 +1 -0 -5 0.6 1 0 1 -0 +1.4 -0 -4.6 0.64 0.96 0 1 -0 +1.4 -0 -5 0.64 1 0 1 -0 +1 -0 -4.6 0.6 0.96 0 1 -0 +1.4 -0 -4.6 0.64 0.96 0 1 -0 +1.8 -0 -5 0.68 1 0 1 -0 +1.4 -0 -5 0.64 1 0 1 -0 +1.8 -0 -4.6 0.68 0.96 0 1 -0 +1.8 -0 -5 0.68 1 0 1 -0 +1.4 -0 -4.6 0.64 0.96 0 1 -0 +1.8 -0 -4.6 0.68 0.96 0 1 -0 +2.2 -0 -5 0.72 1 0 1 -0 +1.8 -0 -5 0.68 1 0 1 -0 +2.2 -0 -4.6 0.72 0.96 0 1 -0 +2.2 -0 -5 0.72 1 0 1 -0 +1.8 -0 -4.6 0.68 0.96 0 1 -0 +2.2 -0 -4.6 0.72 0.96 0 1 -0 +2.6 -0 -5 0.76 1 0 1 -0 +2.2 -0 -5 0.72 1 0 1 -0 +2.6 -0 -4.6 0.76 0.96 0 1 -0 +2.6 -0 -5 0.76 1 0 1 -0 +2.2 -0 -4.6 0.72 0.96 0 1 -0 +2.6 -0 -4.6 0.76 0.96 0 1 -0 +3 -0 -5 0.8 1 0 1 -0 +2.6 -0 -5 0.76 1 0 1 -0 +3 -0 -4.6 0.8 0.96 0 1 -0 +3 -0 -5 0.8 1 0 1 -0 +2.6 -0 -4.6 0.76 0.96 0 1 -0 +3 -0 -4.6 0.8 0.96 0 1 -0 +3.4 -0 -5 0.84 1 0 1 -0 +3 -0 -5 0.8 1 0 1 -0 +3.4 -0 -4.6 0.84 0.96 0 1 -0 +3.4 -0 -5 0.84 1 0 1 -0 +3 -0 -4.6 0.8 0.96 0 1 -0 +3.4 -0 -4.6 0.84 0.96 0 1 -0 +3.8 -0 -5 0.88 1 0 1 -0 +3.4 -0 -5 0.84 1 0 1 -0 +3.8 -0 -4.6 0.88 0.96 0 1 -0 +3.8 -0 -5 0.88 1 0 1 -0 +3.4 -0 -4.6 0.84 0.96 0 1 -0 +3.8 -0 -4.6 0.88 0.96 0 1 -0 +4.2 -0 -5 0.92 1 0 1 -0 +3.8 -0 -5 0.88 1 0 1 -0 +4.2 -0 -4.6 0.92 0.96 0 1 -0 +4.2 -0 -5 0.92 1 0 1 -0 +3.8 -0 -4.6 0.88 0.96 0 1 -0 +4.2 -0 -4.6 0.92 0.96 0 1 -0 +4.6 -0 -5 0.96 1 0 1 -0 +4.2 -0 -5 0.92 1 0 1 -0 +4.6 -0 -4.6 0.96 0.96 0 1 -0 +4.6 -0 -5 0.96 1 0 1 -0 +4.2 -0 -4.6 0.92 0.96 0 1 -0 +4.6 -0 -4.6 0.96 0.96 0 1 -0 +5 -0 -5 1 1 0 1 -0 +4.6 -0 -5 0.96 1 0 1 -0 +5 -0 -4.6 1 0.96 0 1 -0 +5 -0 -5 1 1 0 1 -0 +4.6 -0 -4.6 0.96 0.96 0 1 -0 +-5 -0 -4.2 0 0.92 0 1 -0 +-4.6 -0 -4.6 0.04 0.96 0 1 -0 +-5 -0 -4.6 0 0.96 0 1 -0 +-4.6 -0 -4.2 0.04 0.92 0 1 -0 +-4.6 -0 -4.6 0.04 0.96 0 1 -0 +-5 -0 -4.2 0 0.92 0 1 -0 +-4.6 -0 -4.2 0.04 0.92 0 1 -0 +-4.2 -0 -4.6 0.08 0.96 0 1 -0 +-4.6 -0 -4.6 0.04 0.96 0 1 -0 +-4.2 -0 -4.2 0.08 0.92 0 1 -0 +-4.2 -0 -4.6 0.08 0.96 0 1 -0 +-4.6 -0 -4.2 0.04 0.92 0 1 -0 +-4.2 -0 -4.2 0.08 0.92 0 1 -0 +-3.8 -0 -4.6 0.12 0.96 0 1 -0 +-4.2 -0 -4.6 0.08 0.96 0 1 -0 +-3.8 -0 -4.2 0.12 0.92 0 1 -0 +-3.8 -0 -4.6 0.12 0.96 0 1 -0 +-4.2 -0 -4.2 0.08 0.92 0 1 -0 +-3.8 -0 -4.2 0.12 0.92 0 1 -0 +-3.4 -0 -4.6 0.16 0.96 0 1 -0 +-3.8 -0 -4.6 0.12 0.96 0 1 -0 +-3.4 -0 -4.2 0.16 0.92 0 1 -0 +-3.4 -0 -4.6 0.16 0.96 0 1 -0 +-3.8 -0 -4.2 0.12 0.92 0 1 -0 +-3.4 -0 -4.2 0.16 0.92 0 1 -0 +-3 -0 -4.6 0.2 0.96 0 1 -0 +-3.4 -0 -4.6 0.16 0.96 0 1 -0 +-3 -0 -4.2 0.2 0.92 0 1 -0 +-3 -0 -4.6 0.2 0.96 0 1 -0 +-3.4 -0 -4.2 0.16 0.92 0 1 -0 +-3 -0 -4.2 0.2 0.92 0 1 -0 +-2.6 -0 -4.6 0.24 0.96 0 1 -0 +-3 -0 -4.6 0.2 0.96 0 1 -0 +-2.6 -0 -4.2 0.24 0.92 0 1 -0 +-2.6 -0 -4.6 0.24 0.96 0 1 -0 +-3 -0 -4.2 0.2 0.92 0 1 -0 +-2.6 -0 -4.2 0.24 0.92 0 1 -0 +-2.2 -0 -4.6 0.28 0.96 0 1 -0 +-2.6 -0 -4.6 0.24 0.96 0 1 -0 +-2.2 -0 -4.2 0.28 0.92 0 1 -0 +-2.2 -0 -4.6 0.28 0.96 0 1 -0 +-2.6 -0 -4.2 0.24 0.92 0 1 -0 +-2.2 -0 -4.2 0.28 0.92 0 1 -0 +-1.8 -0 -4.6 0.32 0.96 0 1 -0 +-2.2 -0 -4.6 0.28 0.96 0 1 -0 +-1.8 -0 -4.2 0.32 0.92 0 1 -0 +-1.8 -0 -4.6 0.32 0.96 0 1 -0 +-2.2 -0 -4.2 0.28 0.92 0 1 -0 +-1.8 -0 -4.2 0.32 0.92 0 1 -0 +-1.4 -0 -4.6 0.36 0.96 0 1 -0 +-1.8 -0 -4.6 0.32 0.96 0 1 -0 +-1.4 -0 -4.2 0.36 0.92 0 1 -0 +-1.4 -0 -4.6 0.36 0.96 0 1 -0 +-1.8 -0 -4.2 0.32 0.92 0 1 -0 +-1.4 -0 -4.2 0.36 0.92 0 1 -0 +-1 -0 -4.6 0.4 0.96 0 1 -0 +-1.4 -0 -4.6 0.36 0.96 0 1 -0 +-1 -0 -4.2 0.4 0.92 0 1 -0 +-1 -0 -4.6 0.4 0.96 0 1 -0 +-1.4 -0 -4.2 0.36 0.92 0 1 -0 +-1 -0 -4.2 0.4 0.92 0 1 -0 +-0.6 -0 -4.6 0.44 0.96 0 1 -0 +-1 -0 -4.6 0.4 0.96 0 1 -0 +-0.6 -0 -4.2 0.44 0.92 0 1 -0 +-0.6 -0 -4.6 0.44 0.96 0 1 -0 +-1 -0 -4.2 0.4 0.92 0 1 -0 +-0.6 -0 -4.2 0.44 0.92 0 1 -0 +-0.2 -0 -4.6 0.48 0.96 0 1 -0 +-0.6 -0 -4.6 0.44 0.96 0 1 -0 +-0.2 -0 -4.2 0.48 0.92 0 1 -0 +-0.2 -0 -4.6 0.48 0.96 0 1 -0 +-0.6 -0 -4.2 0.44 0.92 0 1 -0 +-0.2 -0 -4.2 0.48 0.92 0 1 -0 +0.2 -0 -4.6 0.52 0.96 0 1 -0 +-0.2 -0 -4.6 0.48 0.96 0 1 -0 +0.2 -0 -4.2 0.52 0.92 0 1 -0 +0.2 -0 -4.6 0.52 0.96 0 1 -0 +-0.2 -0 -4.2 0.48 0.92 0 1 -0 +0.2 -0 -4.2 0.52 0.92 0 1 -0 +0.6 -0 -4.6 0.56 0.96 0 1 -0 +0.2 -0 -4.6 0.52 0.96 0 1 -0 +0.6 -0 -4.2 0.56 0.92 0 1 -0 +0.6 -0 -4.6 0.56 0.96 0 1 -0 +0.2 -0 -4.2 0.52 0.92 0 1 -0 +0.6 -0 -4.2 0.56 0.92 0 1 -0 +1 -0 -4.6 0.6 0.96 0 1 -0 +0.6 -0 -4.6 0.56 0.96 0 1 -0 +1 -0 -4.2 0.6 0.92 0 1 -0 +1 -0 -4.6 0.6 0.96 0 1 -0 +0.6 -0 -4.2 0.56 0.92 0 1 -0 +1 -0 -4.2 0.6 0.92 0 1 -0 +1.4 -0 -4.6 0.64 0.96 0 1 -0 +1 -0 -4.6 0.6 0.96 0 1 -0 +1.4 -0 -4.2 0.64 0.92 0 1 -0 +1.4 -0 -4.6 0.64 0.96 0 1 -0 +1 -0 -4.2 0.6 0.92 0 1 -0 +1.4 -0 -4.2 0.64 0.92 0 1 -0 +1.8 -0 -4.6 0.68 0.96 0 1 -0 +1.4 -0 -4.6 0.64 0.96 0 1 -0 +1.8 -0 -4.2 0.68 0.92 0 1 -0 +1.8 -0 -4.6 0.68 0.96 0 1 -0 +1.4 -0 -4.2 0.64 0.92 0 1 -0 +1.8 -0 -4.2 0.68 0.92 0 1 -0 +2.2 -0 -4.6 0.72 0.96 0 1 -0 +1.8 -0 -4.6 0.68 0.96 0 1 -0 +2.2 -0 -4.2 0.72 0.92 0 1 -0 +2.2 -0 -4.6 0.72 0.96 0 1 -0 +1.8 -0 -4.2 0.68 0.92 0 1 -0 +2.2 -0 -4.2 0.72 0.92 0 1 -0 +2.6 -0 -4.6 0.76 0.96 0 1 -0 +2.2 -0 -4.6 0.72 0.96 0 1 -0 +2.6 -0 -4.2 0.76 0.92 0 1 -0 +2.6 -0 -4.6 0.76 0.96 0 1 -0 +2.2 -0 -4.2 0.72 0.92 0 1 -0 +2.6 -0 -4.2 0.76 0.92 0 1 -0 +3 -0 -4.6 0.8 0.96 0 1 -0 +2.6 -0 -4.6 0.76 0.96 0 1 -0 +3 -0 -4.2 0.8 0.92 0 1 -0 +3 -0 -4.6 0.8 0.96 0 1 -0 +2.6 -0 -4.2 0.76 0.92 0 1 -0 +3 -0 -4.2 0.8 0.92 0 1 -0 +3.4 -0 -4.6 0.84 0.96 0 1 -0 +3 -0 -4.6 0.8 0.96 0 1 -0 +3.4 -0 -4.2 0.84 0.92 0 1 -0 +3.4 -0 -4.6 0.84 0.96 0 1 -0 +3 -0 -4.2 0.8 0.92 0 1 -0 +3.4 -0 -4.2 0.84 0.92 0 1 -0 +3.8 -0 -4.6 0.88 0.96 0 1 -0 +3.4 -0 -4.6 0.84 0.96 0 1 -0 +3.8 -0 -4.2 0.88 0.92 0 1 -0 +3.8 -0 -4.6 0.88 0.96 0 1 -0 +3.4 -0 -4.2 0.84 0.92 0 1 -0 +3.8 -0 -4.2 0.88 0.92 0 1 -0 +4.2 -0 -4.6 0.92 0.96 0 1 -0 +3.8 -0 -4.6 0.88 0.96 0 1 -0 +4.2 -0 -4.2 0.92 0.92 0 1 -0 +4.2 -0 -4.6 0.92 0.96 0 1 -0 +3.8 -0 -4.2 0.88 0.92 0 1 -0 +4.2 -0 -4.2 0.92 0.92 0 1 -0 +4.6 -0 -4.6 0.96 0.96 0 1 -0 +4.2 -0 -4.6 0.92 0.96 0 1 -0 +4.6 -0 -4.2 0.96 0.92 0 1 -0 +4.6 -0 -4.6 0.96 0.96 0 1 -0 +4.2 -0 -4.2 0.92 0.92 0 1 -0 +4.6 -0 -4.2 0.96 0.92 0 1 -0 +5 -0 -4.6 1 0.96 0 1 -0 +4.6 -0 -4.6 0.96 0.96 0 1 -0 +5 -0 -4.2 1 0.92 0 1 -0 +5 -0 -4.6 1 0.96 0 1 -0 +4.6 -0 -4.2 0.96 0.92 0 1 -0 +-5 -0 -3.8 0 0.88 0 1 -0 +-4.6 -0 -4.2 0.04 0.92 0 1 -0 +-5 -0 -4.2 0 0.92 0 1 -0 +-4.6 -0 -3.8 0.04 0.88 0 1 -0 +-4.6 -0 -4.2 0.04 0.92 0 1 -0 +-5 -0 -3.8 0 0.88 0 1 -0 +-4.6 -0 -3.8 0.04 0.88 0 1 -0 +-4.2 -0 -4.2 0.08 0.92 0 1 -0 +-4.6 -0 -4.2 0.04 0.92 0 1 -0 +-4.2 -0 -3.8 0.08 0.88 0 1 -0 +-4.2 -0 -4.2 0.08 0.92 0 1 -0 +-4.6 -0 -3.8 0.04 0.88 0 1 -0 +-4.2 -0 -3.8 0.08 0.88 0 1 -0 +-3.8 -0 -4.2 0.12 0.92 0 1 -0 +-4.2 -0 -4.2 0.08 0.92 0 1 -0 +-3.8 -0 -3.8 0.12 0.88 0 1 -0 +-3.8 -0 -4.2 0.12 0.92 0 1 -0 +-4.2 -0 -3.8 0.08 0.88 0 1 -0 +-3.8 -0 -3.8 0.12 0.88 0 1 -0 +-3.4 -0 -4.2 0.16 0.92 0 1 -0 +-3.8 -0 -4.2 0.12 0.92 0 1 -0 +-3.4 -0 -3.8 0.16 0.88 0 1 -0 +-3.4 -0 -4.2 0.16 0.92 0 1 -0 +-3.8 -0 -3.8 0.12 0.88 0 1 -0 +-3.4 -0 -3.8 0.16 0.88 0 1 -0 +-3 -0 -4.2 0.2 0.92 0 1 -0 +-3.4 -0 -4.2 0.16 0.92 0 1 -0 +-3 -0 -3.8 0.2 0.88 0 1 -0 +-3 -0 -4.2 0.2 0.92 0 1 -0 +-3.4 -0 -3.8 0.16 0.88 0 1 -0 +-3 -0 -3.8 0.2 0.88 0 1 -0 +-2.6 -0 -4.2 0.24 0.92 0 1 -0 +-3 -0 -4.2 0.2 0.92 0 1 -0 +-2.6 -0 -3.8 0.24 0.88 0 1 -0 +-2.6 -0 -4.2 0.24 0.92 0 1 -0 +-3 -0 -3.8 0.2 0.88 0 1 -0 +-2.6 -0 -3.8 0.24 0.88 0 1 -0 +-2.2 -0 -4.2 0.28 0.92 0 1 -0 +-2.6 -0 -4.2 0.24 0.92 0 1 -0 +-2.2 -0 -3.8 0.28 0.88 0 1 -0 +-2.2 -0 -4.2 0.28 0.92 0 1 -0 +-2.6 -0 -3.8 0.24 0.88 0 1 -0 +-2.2 -0 -3.8 0.28 0.88 0 1 -0 +-1.8 -0 -4.2 0.32 0.92 0 1 -0 +-2.2 -0 -4.2 0.28 0.92 0 1 -0 +-1.8 -0 -3.8 0.32 0.88 0 1 -0 +-1.8 -0 -4.2 0.32 0.92 0 1 -0 +-2.2 -0 -3.8 0.28 0.88 0 1 -0 +-1.8 -0 -3.8 0.32 0.88 0 1 -0 +-1.4 -0 -4.2 0.36 0.92 0 1 -0 +-1.8 -0 -4.2 0.32 0.92 0 1 -0 +-1.4 -0 -3.8 0.36 0.88 0 1 -0 +-1.4 -0 -4.2 0.36 0.92 0 1 -0 +-1.8 -0 -3.8 0.32 0.88 0 1 -0 +-1.4 -0 -3.8 0.36 0.88 0 1 -0 +-1 -0 -4.2 0.4 0.92 0 1 -0 +-1.4 -0 -4.2 0.36 0.92 0 1 -0 +-1 -0 -3.8 0.4 0.88 0 1 -0 +-1 -0 -4.2 0.4 0.92 0 1 -0 +-1.4 -0 -3.8 0.36 0.88 0 1 -0 +-1 -0 -3.8 0.4 0.88 0 1 -0 +-0.6 -0 -4.2 0.44 0.92 0 1 -0 +-1 -0 -4.2 0.4 0.92 0 1 -0 +-0.6 -0 -3.8 0.44 0.88 0 1 -0 +-0.6 -0 -4.2 0.44 0.92 0 1 -0 +-1 -0 -3.8 0.4 0.88 0 1 -0 +-0.6 -0 -3.8 0.44 0.88 0 1 -0 +-0.2 -0 -4.2 0.48 0.92 0 1 -0 +-0.6 -0 -4.2 0.44 0.92 0 1 -0 +-0.2 -0 -3.8 0.48 0.88 0 1 -0 +-0.2 -0 -4.2 0.48 0.92 0 1 -0 +-0.6 -0 -3.8 0.44 0.88 0 1 -0 +-0.2 -0 -3.8 0.48 0.88 0 1 -0 +0.2 -0 -4.2 0.52 0.92 0 1 -0 +-0.2 -0 -4.2 0.48 0.92 0 1 -0 +0.2 -0 -3.8 0.52 0.88 0 1 -0 +0.2 -0 -4.2 0.52 0.92 0 1 -0 +-0.2 -0 -3.8 0.48 0.88 0 1 -0 +0.2 -0 -3.8 0.52 0.88 0 1 -0 +0.6 -0 -4.2 0.56 0.92 0 1 -0 +0.2 -0 -4.2 0.52 0.92 0 1 -0 +0.6 -0 -3.8 0.56 0.88 0 1 -0 +0.6 -0 -4.2 0.56 0.92 0 1 -0 +0.2 -0 -3.8 0.52 0.88 0 1 -0 +0.6 -0 -3.8 0.56 0.88 0 1 -0 +1 -0 -4.2 0.6 0.92 0 1 -0 +0.6 -0 -4.2 0.56 0.92 0 1 -0 +1 -0 -3.8 0.6 0.88 0 1 -0 +1 -0 -4.2 0.6 0.92 0 1 -0 +0.6 -0 -3.8 0.56 0.88 0 1 -0 +1 -0 -3.8 0.6 0.88 0 1 -0 +1.4 -0 -4.2 0.64 0.92 0 1 -0 +1 -0 -4.2 0.6 0.92 0 1 -0 +1.4 -0 -3.8 0.64 0.88 0 1 -0 +1.4 -0 -4.2 0.64 0.92 0 1 -0 +1 -0 -3.8 0.6 0.88 0 1 -0 +1.4 -0 -3.8 0.64 0.88 0 1 -0 +1.8 -0 -4.2 0.68 0.92 0 1 -0 +1.4 -0 -4.2 0.64 0.92 0 1 -0 +1.8 -0 -3.8 0.68 0.88 0 1 -0 +1.8 -0 -4.2 0.68 0.92 0 1 -0 +1.4 -0 -3.8 0.64 0.88 0 1 -0 +1.8 -0 -3.8 0.68 0.88 0 1 -0 +2.2 -0 -4.2 0.72 0.92 0 1 -0 +1.8 -0 -4.2 0.68 0.92 0 1 -0 +2.2 -0 -3.8 0.72 0.88 0 1 -0 +2.2 -0 -4.2 0.72 0.92 0 1 -0 +1.8 -0 -3.8 0.68 0.88 0 1 -0 +2.2 -0 -3.8 0.72 0.88 0 1 -0 +2.6 -0 -4.2 0.76 0.92 0 1 -0 +2.2 -0 -4.2 0.72 0.92 0 1 -0 +2.6 -0 -3.8 0.76 0.88 0 1 -0 +2.6 -0 -4.2 0.76 0.92 0 1 -0 +2.2 -0 -3.8 0.72 0.88 0 1 -0 +2.6 -0 -3.8 0.76 0.88 0 1 -0 +3 -0 -4.2 0.8 0.92 0 1 -0 +2.6 -0 -4.2 0.76 0.92 0 1 -0 +3 -0 -3.8 0.8 0.88 0 1 -0 +3 -0 -4.2 0.8 0.92 0 1 -0 +2.6 -0 -3.8 0.76 0.88 0 1 -0 +3 -0 -3.8 0.8 0.88 0 1 -0 +3.4 -0 -4.2 0.84 0.92 0 1 -0 +3 -0 -4.2 0.8 0.92 0 1 -0 +3.4 -0 -3.8 0.84 0.88 0 1 -0 +3.4 -0 -4.2 0.84 0.92 0 1 -0 +3 -0 -3.8 0.8 0.88 0 1 -0 +3.4 -0 -3.8 0.84 0.88 0 1 -0 +3.8 -0 -4.2 0.88 0.92 0 1 -0 +3.4 -0 -4.2 0.84 0.92 0 1 -0 +3.8 -0 -3.8 0.88 0.88 0 1 -0 +3.8 -0 -4.2 0.88 0.92 0 1 -0 +3.4 -0 -3.8 0.84 0.88 0 1 -0 +3.8 -0 -3.8 0.88 0.88 0 1 -0 +4.2 -0 -4.2 0.92 0.92 0 1 -0 +3.8 -0 -4.2 0.88 0.92 0 1 -0 +4.2 -0 -3.8 0.92 0.88 0 1 -0 +4.2 -0 -4.2 0.92 0.92 0 1 -0 +3.8 -0 -3.8 0.88 0.88 0 1 -0 +4.2 -0 -3.8 0.92 0.88 0 1 -0 +4.6 -0 -4.2 0.96 0.92 0 1 -0 +4.2 -0 -4.2 0.92 0.92 0 1 -0 +4.6 -0 -3.8 0.96 0.88 0 1 -0 +4.6 -0 -4.2 0.96 0.92 0 1 -0 +4.2 -0 -3.8 0.92 0.88 0 1 -0 +4.6 -0 -3.8 0.96 0.88 0 1 -0 +5 -0 -4.2 1 0.92 0 1 -0 +4.6 -0 -4.2 0.96 0.92 0 1 -0 +5 -0 -3.8 1 0.88 0 1 -0 +5 -0 -4.2 1 0.92 0 1 -0 +4.6 -0 -3.8 0.96 0.88 0 1 -0 +-5 -0 -3.4 0 0.84 0 1 -0 +-4.6 -0 -3.8 0.04 0.88 0 1 -0 +-5 -0 -3.8 0 0.88 0 1 -0 +-4.6 -0 -3.4 0.04 0.84 0 1 -0 +-4.6 -0 -3.8 0.04 0.88 0 1 -0 +-5 -0 -3.4 0 0.84 0 1 -0 +-4.6 -0 -3.4 0.04 0.84 0 1 -0 +-4.2 -0 -3.8 0.08 0.88 0 1 -0 +-4.6 -0 -3.8 0.04 0.88 0 1 -0 +-4.2 -0 -3.4 0.08 0.84 0 1 -0 +-4.2 -0 -3.8 0.08 0.88 0 1 -0 +-4.6 -0 -3.4 0.04 0.84 0 1 -0 +-4.2 -0 -3.4 0.08 0.84 0 1 -0 +-3.8 -0 -3.8 0.12 0.88 0 1 -0 +-4.2 -0 -3.8 0.08 0.88 0 1 -0 +-3.8 -0 -3.4 0.12 0.84 0 1 -0 +-3.8 -0 -3.8 0.12 0.88 0 1 -0 +-4.2 -0 -3.4 0.08 0.84 0 1 -0 +-3.8 -0 -3.4 0.12 0.84 0 1 -0 +-3.4 -0 -3.8 0.16 0.88 0 1 -0 +-3.8 -0 -3.8 0.12 0.88 0 1 -0 +-3.4 -0 -3.4 0.16 0.84 0 1 -0 +-3.4 -0 -3.8 0.16 0.88 0 1 -0 +-3.8 -0 -3.4 0.12 0.84 0 1 -0 +-3.4 -0 -3.4 0.16 0.84 0 1 -0 +-3 -0 -3.8 0.2 0.88 0 1 -0 +-3.4 -0 -3.8 0.16 0.88 0 1 -0 +-3 -0 -3.4 0.2 0.84 0 1 -0 +-3 -0 -3.8 0.2 0.88 0 1 -0 +-3.4 -0 -3.4 0.16 0.84 0 1 -0 +-3 -0 -3.4 0.2 0.84 0 1 -0 +-2.6 -0 -3.8 0.24 0.88 0 1 -0 +-3 -0 -3.8 0.2 0.88 0 1 -0 +-2.6 -0 -3.4 0.24 0.84 0 1 -0 +-2.6 -0 -3.8 0.24 0.88 0 1 -0 +-3 -0 -3.4 0.2 0.84 0 1 -0 +-2.6 -0 -3.4 0.24 0.84 0 1 -0 +-2.2 -0 -3.8 0.28 0.88 0 1 -0 +-2.6 -0 -3.8 0.24 0.88 0 1 -0 +-2.2 -0 -3.4 0.28 0.84 0 1 -0 +-2.2 -0 -3.8 0.28 0.88 0 1 -0 +-2.6 -0 -3.4 0.24 0.84 0 1 -0 +-2.2 -0 -3.4 0.28 0.84 0 1 -0 +-1.8 -0 -3.8 0.32 0.88 0 1 -0 +-2.2 -0 -3.8 0.28 0.88 0 1 -0 +-1.8 -0 -3.4 0.32 0.84 0 1 -0 +-1.8 -0 -3.8 0.32 0.88 0 1 -0 +-2.2 -0 -3.4 0.28 0.84 0 1 -0 +-1.8 -0 -3.4 0.32 0.84 0 1 -0 +-1.4 -0 -3.8 0.36 0.88 0 1 -0 +-1.8 -0 -3.8 0.32 0.88 0 1 -0 +-1.4 -0 -3.4 0.36 0.84 0 1 -0 +-1.4 -0 -3.8 0.36 0.88 0 1 -0 +-1.8 -0 -3.4 0.32 0.84 0 1 -0 +-1.4 -0 -3.4 0.36 0.84 0 1 -0 +-1 -0 -3.8 0.4 0.88 0 1 -0 +-1.4 -0 -3.8 0.36 0.88 0 1 -0 +-1 -0 -3.4 0.4 0.84 0 1 -0 +-1 -0 -3.8 0.4 0.88 0 1 -0 +-1.4 -0 -3.4 0.36 0.84 0 1 -0 +-1 -0 -3.4 0.4 0.84 0 1 -0 +-0.6 -0 -3.8 0.44 0.88 0 1 -0 +-1 -0 -3.8 0.4 0.88 0 1 -0 +-0.6 -0 -3.4 0.44 0.84 0 1 -0 +-0.6 -0 -3.8 0.44 0.88 0 1 -0 +-1 -0 -3.4 0.4 0.84 0 1 -0 +-0.6 -0 -3.4 0.44 0.84 0 1 -0 +-0.2 -0 -3.8 0.48 0.88 0 1 -0 +-0.6 -0 -3.8 0.44 0.88 0 1 -0 +-0.2 -0 -3.4 0.48 0.84 0 1 -0 +-0.2 -0 -3.8 0.48 0.88 0 1 -0 +-0.6 -0 -3.4 0.44 0.84 0 1 -0 +-0.2 -0 -3.4 0.48 0.84 0 1 -0 +0.2 -0 -3.8 0.52 0.88 0 1 -0 +-0.2 -0 -3.8 0.48 0.88 0 1 -0 +0.2 -0 -3.4 0.52 0.84 0 1 -0 +0.2 -0 -3.8 0.52 0.88 0 1 -0 +-0.2 -0 -3.4 0.48 0.84 0 1 -0 +0.2 -0 -3.4 0.52 0.84 0 1 -0 +0.6 -0 -3.8 0.56 0.88 0 1 -0 +0.2 -0 -3.8 0.52 0.88 0 1 -0 +0.6 -0 -3.4 0.56 0.84 0 1 -0 +0.6 -0 -3.8 0.56 0.88 0 1 -0 +0.2 -0 -3.4 0.52 0.84 0 1 -0 +0.6 -0 -3.4 0.56 0.84 0 1 -0 +1 -0 -3.8 0.6 0.88 0 1 -0 +0.6 -0 -3.8 0.56 0.88 0 1 -0 +1 -0 -3.4 0.6 0.84 0 1 -0 +1 -0 -3.8 0.6 0.88 0 1 -0 +0.6 -0 -3.4 0.56 0.84 0 1 -0 +1 -0 -3.4 0.6 0.84 0 1 -0 +1.4 -0 -3.8 0.64 0.88 0 1 -0 +1 -0 -3.8 0.6 0.88 0 1 -0 +1.4 -0 -3.4 0.64 0.84 0 1 -0 +1.4 -0 -3.8 0.64 0.88 0 1 -0 +1 -0 -3.4 0.6 0.84 0 1 -0 +1.4 -0 -3.4 0.64 0.84 0 1 -0 +1.8 -0 -3.8 0.68 0.88 0 1 -0 +1.4 -0 -3.8 0.64 0.88 0 1 -0 +1.8 -0 -3.4 0.68 0.84 0 1 -0 +1.8 -0 -3.8 0.68 0.88 0 1 -0 +1.4 -0 -3.4 0.64 0.84 0 1 -0 +1.8 -0 -3.4 0.68 0.84 0 1 -0 +2.2 -0 -3.8 0.72 0.88 0 1 -0 +1.8 -0 -3.8 0.68 0.88 0 1 -0 +2.2 -0 -3.4 0.72 0.84 0 1 -0 +2.2 -0 -3.8 0.72 0.88 0 1 -0 +1.8 -0 -3.4 0.68 0.84 0 1 -0 +2.2 -0 -3.4 0.72 0.84 0 1 -0 +2.6 -0 -3.8 0.76 0.88 0 1 -0 +2.2 -0 -3.8 0.72 0.88 0 1 -0 +2.6 -0 -3.4 0.76 0.84 0 1 -0 +2.6 -0 -3.8 0.76 0.88 0 1 -0 +2.2 -0 -3.4 0.72 0.84 0 1 -0 +2.6 -0 -3.4 0.76 0.84 0 1 -0 +3 -0 -3.8 0.8 0.88 0 1 -0 +2.6 -0 -3.8 0.76 0.88 0 1 -0 +3 -0 -3.4 0.8 0.84 0 1 -0 +3 -0 -3.8 0.8 0.88 0 1 -0 +2.6 -0 -3.4 0.76 0.84 0 1 -0 +3 -0 -3.4 0.8 0.84 0 1 -0 +3.4 -0 -3.8 0.84 0.88 0 1 -0 +3 -0 -3.8 0.8 0.88 0 1 -0 +3.4 -0 -3.4 0.84 0.84 0 1 -0 +3.4 -0 -3.8 0.84 0.88 0 1 -0 +3 -0 -3.4 0.8 0.84 0 1 -0 +3.4 -0 -3.4 0.84 0.84 0 1 -0 +3.8 -0 -3.8 0.88 0.88 0 1 -0 +3.4 -0 -3.8 0.84 0.88 0 1 -0 +3.8 -0 -3.4 0.88 0.84 0 1 -0 +3.8 -0 -3.8 0.88 0.88 0 1 -0 +3.4 -0 -3.4 0.84 0.84 0 1 -0 +3.8 -0 -3.4 0.88 0.84 0 1 -0 +4.2 -0 -3.8 0.92 0.88 0 1 -0 +3.8 -0 -3.8 0.88 0.88 0 1 -0 +4.2 -0 -3.4 0.92 0.84 0 1 -0 +4.2 -0 -3.8 0.92 0.88 0 1 -0 +3.8 -0 -3.4 0.88 0.84 0 1 -0 +4.2 -0 -3.4 0.92 0.84 0 1 -0 +4.6 -0 -3.8 0.96 0.88 0 1 -0 +4.2 -0 -3.8 0.92 0.88 0 1 -0 +4.6 -0 -3.4 0.96 0.84 0 1 -0 +4.6 -0 -3.8 0.96 0.88 0 1 -0 +4.2 -0 -3.4 0.92 0.84 0 1 -0 +4.6 -0 -3.4 0.96 0.84 0 1 -0 +5 -0 -3.8 1 0.88 0 1 -0 +4.6 -0 -3.8 0.96 0.88 0 1 -0 +5 -0 -3.4 1 0.84 0 1 -0 +5 -0 -3.8 1 0.88 0 1 -0 +4.6 -0 -3.4 0.96 0.84 0 1 -0 +-5 -0 -3 0 0.8 0 1 -0 +-4.6 -0 -3.4 0.04 0.84 0 1 -0 +-5 -0 -3.4 0 0.84 0 1 -0 +-4.6 -0 -3 0.04 0.8 0 1 -0 +-4.6 -0 -3.4 0.04 0.84 0 1 -0 +-5 -0 -3 0 0.8 0 1 -0 +-4.6 -0 -3 0.04 0.8 0 1 -0 +-4.2 -0 -3.4 0.08 0.84 0 1 -0 +-4.6 -0 -3.4 0.04 0.84 0 1 -0 +-4.2 -0 -3 0.08 0.8 0 1 -0 +-4.2 -0 -3.4 0.08 0.84 0 1 -0 +-4.6 -0 -3 0.04 0.8 0 1 -0 +-4.2 -0 -3 0.08 0.8 0 1 -0 +-3.8 -0 -3.4 0.12 0.84 0 1 -0 +-4.2 -0 -3.4 0.08 0.84 0 1 -0 +-3.8 -0 -3 0.12 0.8 0 1 -0 +-3.8 -0 -3.4 0.12 0.84 0 1 -0 +-4.2 -0 -3 0.08 0.8 0 1 -0 +-3.8 -0 -3 0.12 0.8 0 1 -0 +-3.4 -0 -3.4 0.16 0.84 0 1 -0 +-3.8 -0 -3.4 0.12 0.84 0 1 -0 +-3.4 -0 -3 0.16 0.8 0 1 -0 +-3.4 -0 -3.4 0.16 0.84 0 1 -0 +-3.8 -0 -3 0.12 0.8 0 1 -0 +-3.4 -0 -3 0.16 0.8 0 1 -0 +-3 -0 -3.4 0.2 0.84 0 1 -0 +-3.4 -0 -3.4 0.16 0.84 0 1 -0 +-3 -0 -3 0.2 0.8 0 1 -0 +-3 -0 -3.4 0.2 0.84 0 1 -0 +-3.4 -0 -3 0.16 0.8 0 1 -0 +-3 -0 -3 0.2 0.8 0 1 -0 +-2.6 -0 -3.4 0.24 0.84 0 1 -0 +-3 -0 -3.4 0.2 0.84 0 1 -0 +-2.6 -0 -3 0.24 0.8 0 1 -0 +-2.6 -0 -3.4 0.24 0.84 0 1 -0 +-3 -0 -3 0.2 0.8 0 1 -0 +-2.6 -0 -3 0.24 0.8 0 1 -0 +-2.2 -0 -3.4 0.28 0.84 0 1 -0 +-2.6 -0 -3.4 0.24 0.84 0 1 -0 +-2.2 -0 -3 0.28 0.8 0 1 -0 +-2.2 -0 -3.4 0.28 0.84 0 1 -0 +-2.6 -0 -3 0.24 0.8 0 1 -0 +-2.2 -0 -3 0.28 0.8 0 1 -0 +-1.8 -0 -3.4 0.32 0.84 0 1 -0 +-2.2 -0 -3.4 0.28 0.84 0 1 -0 +-1.8 -0 -3 0.32 0.8 0 1 -0 +-1.8 -0 -3.4 0.32 0.84 0 1 -0 +-2.2 -0 -3 0.28 0.8 0 1 -0 +-1.8 -0 -3 0.32 0.8 0 1 -0 +-1.4 -0 -3.4 0.36 0.84 0 1 -0 +-1.8 -0 -3.4 0.32 0.84 0 1 -0 +-1.4 -0 -3 0.36 0.8 0 1 -0 +-1.4 -0 -3.4 0.36 0.84 0 1 -0 +-1.8 -0 -3 0.32 0.8 0 1 -0 +-1.4 -0 -3 0.36 0.8 0 1 -0 +-1 -0 -3.4 0.4 0.84 0 1 -0 +-1.4 -0 -3.4 0.36 0.84 0 1 -0 +-1 -0 -3 0.4 0.8 0 1 -0 +-1 -0 -3.4 0.4 0.84 0 1 -0 +-1.4 -0 -3 0.36 0.8 0 1 -0 +-1 -0 -3 0.4 0.8 0 1 -0 +-0.6 -0 -3.4 0.44 0.84 0 1 -0 +-1 -0 -3.4 0.4 0.84 0 1 -0 +-0.6 -0 -3 0.44 0.8 0 1 -0 +-0.6 -0 -3.4 0.44 0.84 0 1 -0 +-1 -0 -3 0.4 0.8 0 1 -0 +-0.6 -0 -3 0.44 0.8 0 1 -0 +-0.2 -0 -3.4 0.48 0.84 0 1 -0 +-0.6 -0 -3.4 0.44 0.84 0 1 -0 +-0.2 -0 -3 0.48 0.8 0 1 -0 +-0.2 -0 -3.4 0.48 0.84 0 1 -0 +-0.6 -0 -3 0.44 0.8 0 1 -0 +-0.2 -0 -3 0.48 0.8 0 1 -0 +0.2 -0 -3.4 0.52 0.84 0 1 -0 +-0.2 -0 -3.4 0.48 0.84 0 1 -0 +0.2 -0 -3 0.52 0.8 0 1 -0 +0.2 -0 -3.4 0.52 0.84 0 1 -0 +-0.2 -0 -3 0.48 0.8 0 1 -0 +0.2 -0 -3 0.52 0.8 0 1 -0 +0.6 -0 -3.4 0.56 0.84 0 1 -0 +0.2 -0 -3.4 0.52 0.84 0 1 -0 +0.6 -0 -3 0.56 0.8 0 1 -0 +0.6 -0 -3.4 0.56 0.84 0 1 -0 +0.2 -0 -3 0.52 0.8 0 1 -0 +0.6 -0 -3 0.56 0.8 0 1 -0 +1 -0 -3.4 0.6 0.84 0 1 -0 +0.6 -0 -3.4 0.56 0.84 0 1 -0 +1 -0 -3 0.6 0.8 0 1 -0 +1 -0 -3.4 0.6 0.84 0 1 -0 +0.6 -0 -3 0.56 0.8 0 1 -0 +1 -0 -3 0.6 0.8 0 1 -0 +1.4 -0 -3.4 0.64 0.84 0 1 -0 +1 -0 -3.4 0.6 0.84 0 1 -0 +1.4 -0 -3 0.64 0.8 0 1 -0 +1.4 -0 -3.4 0.64 0.84 0 1 -0 +1 -0 -3 0.6 0.8 0 1 -0 +1.4 -0 -3 0.64 0.8 0 1 -0 +1.8 -0 -3.4 0.68 0.84 0 1 -0 +1.4 -0 -3.4 0.64 0.84 0 1 -0 +1.8 -0 -3 0.68 0.8 0 1 -0 +1.8 -0 -3.4 0.68 0.84 0 1 -0 +1.4 -0 -3 0.64 0.8 0 1 -0 +1.8 -0 -3 0.68 0.8 0 1 -0 +2.2 -0 -3.4 0.72 0.84 0 1 -0 +1.8 -0 -3.4 0.68 0.84 0 1 -0 +2.2 -0 -3 0.72 0.8 0 1 -0 +2.2 -0 -3.4 0.72 0.84 0 1 -0 +1.8 -0 -3 0.68 0.8 0 1 -0 +2.2 -0 -3 0.72 0.8 0 1 -0 +2.6 -0 -3.4 0.76 0.84 0 1 -0 +2.2 -0 -3.4 0.72 0.84 0 1 -0 +2.6 -0 -3 0.76 0.8 0 1 -0 +2.6 -0 -3.4 0.76 0.84 0 1 -0 +2.2 -0 -3 0.72 0.8 0 1 -0 +2.6 -0 -3 0.76 0.8 0 1 -0 +3 -0 -3.4 0.8 0.84 0 1 -0 +2.6 -0 -3.4 0.76 0.84 0 1 -0 +3 -0 -3 0.8 0.8 0 1 -0 +3 -0 -3.4 0.8 0.84 0 1 -0 +2.6 -0 -3 0.76 0.8 0 1 -0 +3 -0 -3 0.8 0.8 0 1 -0 +3.4 -0 -3.4 0.84 0.84 0 1 -0 +3 -0 -3.4 0.8 0.84 0 1 -0 +3.4 -0 -3 0.84 0.8 0 1 -0 +3.4 -0 -3.4 0.84 0.84 0 1 -0 +3 -0 -3 0.8 0.8 0 1 -0 +3.4 -0 -3 0.84 0.8 0 1 -0 +3.8 -0 -3.4 0.88 0.84 0 1 -0 +3.4 -0 -3.4 0.84 0.84 0 1 -0 +3.8 -0 -3 0.88 0.8 0 1 -0 +3.8 -0 -3.4 0.88 0.84 0 1 -0 +3.4 -0 -3 0.84 0.8 0 1 -0 +3.8 -0 -3 0.88 0.8 0 1 -0 +4.2 -0 -3.4 0.92 0.84 0 1 -0 +3.8 -0 -3.4 0.88 0.84 0 1 -0 +4.2 -0 -3 0.92 0.8 0 1 -0 +4.2 -0 -3.4 0.92 0.84 0 1 -0 +3.8 -0 -3 0.88 0.8 0 1 -0 +4.2 -0 -3 0.92 0.8 0 1 -0 +4.6 -0 -3.4 0.96 0.84 0 1 -0 +4.2 -0 -3.4 0.92 0.84 0 1 -0 +4.6 -0 -3 0.96 0.8 0 1 -0 +4.6 -0 -3.4 0.96 0.84 0 1 -0 +4.2 -0 -3 0.92 0.8 0 1 -0 +4.6 -0 -3 0.96 0.8 0 1 -0 +5 -0 -3.4 1 0.84 0 1 -0 +4.6 -0 -3.4 0.96 0.84 0 1 -0 +5 -0 -3 1 0.8 0 1 -0 +5 -0 -3.4 1 0.84 0 1 -0 +4.6 -0 -3 0.96 0.8 0 1 -0 +-5 -0 -2.6 0 0.76 0 1 -0 +-4.6 -0 -3 0.04 0.8 0 1 -0 +-5 -0 -3 0 0.8 0 1 -0 +-4.6 -0 -2.6 0.04 0.76 0 1 -0 +-4.6 -0 -3 0.04 0.8 0 1 -0 +-5 -0 -2.6 0 0.76 0 1 -0 +-4.6 -0 -2.6 0.04 0.76 0 1 -0 +-4.2 -0 -3 0.08 0.8 0 1 -0 +-4.6 -0 -3 0.04 0.8 0 1 -0 +-4.2 -0 -2.6 0.08 0.76 0 1 -0 +-4.2 -0 -3 0.08 0.8 0 1 -0 +-4.6 -0 -2.6 0.04 0.76 0 1 -0 +-4.2 -0 -2.6 0.08 0.76 0 1 -0 +-3.8 -0 -3 0.12 0.8 0 1 -0 +-4.2 -0 -3 0.08 0.8 0 1 -0 +-3.8 -0 -2.6 0.12 0.76 0 1 -0 +-3.8 -0 -3 0.12 0.8 0 1 -0 +-4.2 -0 -2.6 0.08 0.76 0 1 -0 +-3.8 -0 -2.6 0.12 0.76 0 1 -0 +-3.4 -0 -3 0.16 0.8 0 1 -0 +-3.8 -0 -3 0.12 0.8 0 1 -0 +-3.4 -0 -2.6 0.16 0.76 0 1 -0 +-3.4 -0 -3 0.16 0.8 0 1 -0 +-3.8 -0 -2.6 0.12 0.76 0 1 -0 +-3.4 -0 -2.6 0.16 0.76 0 1 -0 +-3 -0 -3 0.2 0.8 0 1 -0 +-3.4 -0 -3 0.16 0.8 0 1 -0 +-3 -0 -2.6 0.2 0.76 0 1 -0 +-3 -0 -3 0.2 0.8 0 1 -0 +-3.4 -0 -2.6 0.16 0.76 0 1 -0 +-3 -0 -2.6 0.2 0.76 0 1 -0 +-2.6 -0 -3 0.24 0.8 0 1 -0 +-3 -0 -3 0.2 0.8 0 1 -0 +-2.6 -0 -2.6 0.24 0.76 0 1 -0 +-2.6 -0 -3 0.24 0.8 0 1 -0 +-3 -0 -2.6 0.2 0.76 0 1 -0 +-2.6 -0 -2.6 0.24 0.76 0 1 -0 +-2.2 -0 -3 0.28 0.8 0 1 -0 +-2.6 -0 -3 0.24 0.8 0 1 -0 +-2.2 -0 -2.6 0.28 0.76 0 1 -0 +-2.2 -0 -3 0.28 0.8 0 1 -0 +-2.6 -0 -2.6 0.24 0.76 0 1 -0 +-2.2 -0 -2.6 0.28 0.76 0 1 -0 +-1.8 -0 -3 0.32 0.8 0 1 -0 +-2.2 -0 -3 0.28 0.8 0 1 -0 +-1.8 -0 -2.6 0.32 0.76 0 1 -0 +-1.8 -0 -3 0.32 0.8 0 1 -0 +-2.2 -0 -2.6 0.28 0.76 0 1 -0 +-1.8 -0 -2.6 0.32 0.76 0 1 -0 +-1.4 -0 -3 0.36 0.8 0 1 -0 +-1.8 -0 -3 0.32 0.8 0 1 -0 +-1.4 -0 -2.6 0.36 0.76 0 1 -0 +-1.4 -0 -3 0.36 0.8 0 1 -0 +-1.8 -0 -2.6 0.32 0.76 0 1 -0 +-1.4 -0 -2.6 0.36 0.76 0 1 -0 +-1 -0 -3 0.4 0.8 0 1 -0 +-1.4 -0 -3 0.36 0.8 0 1 -0 +-1 -0 -2.6 0.4 0.76 0 1 -0 +-1 -0 -3 0.4 0.8 0 1 -0 +-1.4 -0 -2.6 0.36 0.76 0 1 -0 +-1 -0 -2.6 0.4 0.76 0 1 -0 +-0.6 -0 -3 0.44 0.8 0 1 -0 +-1 -0 -3 0.4 0.8 0 1 -0 +-0.6 -0 -2.6 0.44 0.76 0 1 -0 +-0.6 -0 -3 0.44 0.8 0 1 -0 +-1 -0 -2.6 0.4 0.76 0 1 -0 +-0.6 -0 -2.6 0.44 0.76 0 1 -0 +-0.2 -0 -3 0.48 0.8 0 1 -0 +-0.6 -0 -3 0.44 0.8 0 1 -0 +-0.2 -0 -2.6 0.48 0.76 0 1 -0 +-0.2 -0 -3 0.48 0.8 0 1 -0 +-0.6 -0 -2.6 0.44 0.76 0 1 -0 +-0.2 -0 -2.6 0.48 0.76 0 1 -0 +0.2 -0 -3 0.52 0.8 0 1 -0 +-0.2 -0 -3 0.48 0.8 0 1 -0 +0.2 -0 -2.6 0.52 0.76 0 1 -0 +0.2 -0 -3 0.52 0.8 0 1 -0 +-0.2 -0 -2.6 0.48 0.76 0 1 -0 +0.2 -0 -2.6 0.52 0.76 0 1 -0 +0.6 -0 -3 0.56 0.8 0 1 -0 +0.2 -0 -3 0.52 0.8 0 1 -0 +0.6 -0 -2.6 0.56 0.76 0 1 -0 +0.6 -0 -3 0.56 0.8 0 1 -0 +0.2 -0 -2.6 0.52 0.76 0 1 -0 +0.6 -0 -2.6 0.56 0.76 0 1 -0 +1 -0 -3 0.6 0.8 0 1 -0 +0.6 -0 -3 0.56 0.8 0 1 -0 +1 -0 -2.6 0.6 0.76 0 1 -0 +1 -0 -3 0.6 0.8 0 1 -0 +0.6 -0 -2.6 0.56 0.76 0 1 -0 +1 -0 -2.6 0.6 0.76 0 1 -0 +1.4 -0 -3 0.64 0.8 0 1 -0 +1 -0 -3 0.6 0.8 0 1 -0 +1.4 -0 -2.6 0.64 0.76 0 1 -0 +1.4 -0 -3 0.64 0.8 0 1 -0 +1 -0 -2.6 0.6 0.76 0 1 -0 +1.4 -0 -2.6 0.64 0.76 0 1 -0 +1.8 -0 -3 0.68 0.8 0 1 -0 +1.4 -0 -3 0.64 0.8 0 1 -0 +1.8 -0 -2.6 0.68 0.76 0 1 -0 +1.8 -0 -3 0.68 0.8 0 1 -0 +1.4 -0 -2.6 0.64 0.76 0 1 -0 +1.8 -0 -2.6 0.68 0.76 0 1 -0 +2.2 -0 -3 0.72 0.8 0 1 -0 +1.8 -0 -3 0.68 0.8 0 1 -0 +2.2 -0 -2.6 0.72 0.76 0 1 -0 +2.2 -0 -3 0.72 0.8 0 1 -0 +1.8 -0 -2.6 0.68 0.76 0 1 -0 +2.2 -0 -2.6 0.72 0.76 0 1 -0 +2.6 -0 -3 0.76 0.8 0 1 -0 +2.2 -0 -3 0.72 0.8 0 1 -0 +2.6 -0 -2.6 0.76 0.76 0 1 -0 +2.6 -0 -3 0.76 0.8 0 1 -0 +2.2 -0 -2.6 0.72 0.76 0 1 -0 +2.6 -0 -2.6 0.76 0.76 0 1 -0 +3 -0 -3 0.8 0.8 0 1 -0 +2.6 -0 -3 0.76 0.8 0 1 -0 +3 -0 -2.6 0.8 0.76 0 1 -0 +3 -0 -3 0.8 0.8 0 1 -0 +2.6 -0 -2.6 0.76 0.76 0 1 -0 +3 -0 -2.6 0.8 0.76 0 1 -0 +3.4 -0 -3 0.84 0.8 0 1 -0 +3 -0 -3 0.8 0.8 0 1 -0 +3.4 -0 -2.6 0.84 0.76 0 1 -0 +3.4 -0 -3 0.84 0.8 0 1 -0 +3 -0 -2.6 0.8 0.76 0 1 -0 +3.4 -0 -2.6 0.84 0.76 0 1 -0 +3.8 -0 -3 0.88 0.8 0 1 -0 +3.4 -0 -3 0.84 0.8 0 1 -0 +3.8 -0 -2.6 0.88 0.76 0 1 -0 +3.8 -0 -3 0.88 0.8 0 1 -0 +3.4 -0 -2.6 0.84 0.76 0 1 -0 +3.8 -0 -2.6 0.88 0.76 0 1 -0 +4.2 -0 -3 0.92 0.8 0 1 -0 +3.8 -0 -3 0.88 0.8 0 1 -0 +4.2 -0 -2.6 0.92 0.76 0 1 -0 +4.2 -0 -3 0.92 0.8 0 1 -0 +3.8 -0 -2.6 0.88 0.76 0 1 -0 +4.2 -0 -2.6 0.92 0.76 0 1 -0 +4.6 -0 -3 0.96 0.8 0 1 -0 +4.2 -0 -3 0.92 0.8 0 1 -0 +4.6 -0 -2.6 0.96 0.76 0 1 -0 +4.6 -0 -3 0.96 0.8 0 1 -0 +4.2 -0 -2.6 0.92 0.76 0 1 -0 +4.6 -0 -2.6 0.96 0.76 0 1 -0 +5 -0 -3 1 0.8 0 1 -0 +4.6 -0 -3 0.96 0.8 0 1 -0 +5 -0 -2.6 1 0.76 0 1 -0 +5 -0 -3 1 0.8 0 1 -0 +4.6 -0 -2.6 0.96 0.76 0 1 -0 +-5 -0 -2.2 0 0.72 0 1 -0 +-4.6 -0 -2.6 0.04 0.76 0 1 -0 +-5 -0 -2.6 0 0.76 0 1 -0 +-4.6 -0 -2.2 0.04 0.72 0 1 -0 +-4.6 -0 -2.6 0.04 0.76 0 1 -0 +-5 -0 -2.2 0 0.72 0 1 -0 +-4.6 -0 -2.2 0.04 0.72 0 1 -0 +-4.2 -0 -2.6 0.08 0.76 0 1 -0 +-4.6 -0 -2.6 0.04 0.76 0 1 -0 +-4.2 -0 -2.2 0.08 0.72 0 1 -0 +-4.2 -0 -2.6 0.08 0.76 0 1 -0 +-4.6 -0 -2.2 0.04 0.72 0 1 -0 +-4.2 -0 -2.2 0.08 0.72 0 1 -0 +-3.8 -0 -2.6 0.12 0.76 0 1 -0 +-4.2 -0 -2.6 0.08 0.76 0 1 -0 +-3.8 -0 -2.2 0.12 0.72 0 1 -0 +-3.8 -0 -2.6 0.12 0.76 0 1 -0 +-4.2 -0 -2.2 0.08 0.72 0 1 -0 +-3.8 -0 -2.2 0.12 0.72 0 1 -0 +-3.4 -0 -2.6 0.16 0.76 0 1 -0 +-3.8 -0 -2.6 0.12 0.76 0 1 -0 +-3.4 -0 -2.2 0.16 0.72 0 1 -0 +-3.4 -0 -2.6 0.16 0.76 0 1 -0 +-3.8 -0 -2.2 0.12 0.72 0 1 -0 +-3.4 -0 -2.2 0.16 0.72 0 1 -0 +-3 -0 -2.6 0.2 0.76 0 1 -0 +-3.4 -0 -2.6 0.16 0.76 0 1 -0 +-3 -0 -2.2 0.2 0.72 0 1 -0 +-3 -0 -2.6 0.2 0.76 0 1 -0 +-3.4 -0 -2.2 0.16 0.72 0 1 -0 +-3 -0 -2.2 0.2 0.72 0 1 -0 +-2.6 -0 -2.6 0.24 0.76 0 1 -0 +-3 -0 -2.6 0.2 0.76 0 1 -0 +-2.6 -0 -2.2 0.24 0.72 0 1 -0 +-2.6 -0 -2.6 0.24 0.76 0 1 -0 +-3 -0 -2.2 0.2 0.72 0 1 -0 +-2.6 -0 -2.2 0.24 0.72 0 1 -0 +-2.2 -0 -2.6 0.28 0.76 0 1 -0 +-2.6 -0 -2.6 0.24 0.76 0 1 -0 +-2.2 -0 -2.2 0.28 0.72 0 1 -0 +-2.2 -0 -2.6 0.28 0.76 0 1 -0 +-2.6 -0 -2.2 0.24 0.72 0 1 -0 +-2.2 -0 -2.2 0.28 0.72 0 1 -0 +-1.8 -0 -2.6 0.32 0.76 0 1 -0 +-2.2 -0 -2.6 0.28 0.76 0 1 -0 +-1.8 -0 -2.2 0.32 0.72 0 1 -0 +-1.8 -0 -2.6 0.32 0.76 0 1 -0 +-2.2 -0 -2.2 0.28 0.72 0 1 -0 +-1.8 -0 -2.2 0.32 0.72 0 1 -0 +-1.4 -0 -2.6 0.36 0.76 0 1 -0 +-1.8 -0 -2.6 0.32 0.76 0 1 -0 +-1.4 -0 -2.2 0.36 0.72 0 1 -0 +-1.4 -0 -2.6 0.36 0.76 0 1 -0 +-1.8 -0 -2.2 0.32 0.72 0 1 -0 +-1.4 -0 -2.2 0.36 0.72 0 1 -0 +-1 -0 -2.6 0.4 0.76 0 1 -0 +-1.4 -0 -2.6 0.36 0.76 0 1 -0 +-1 -0 -2.2 0.4 0.72 0 1 -0 +-1 -0 -2.6 0.4 0.76 0 1 -0 +-1.4 -0 -2.2 0.36 0.72 0 1 -0 +-1 -0 -2.2 0.4 0.72 0 1 -0 +-0.6 -0 -2.6 0.44 0.76 0 1 -0 +-1 -0 -2.6 0.4 0.76 0 1 -0 +-0.6 -0 -2.2 0.44 0.72 0 1 -0 +-0.6 -0 -2.6 0.44 0.76 0 1 -0 +-1 -0 -2.2 0.4 0.72 0 1 -0 +-0.6 -0 -2.2 0.44 0.72 0 1 -0 +-0.2 -0 -2.6 0.48 0.76 0 1 -0 +-0.6 -0 -2.6 0.44 0.76 0 1 -0 +-0.2 -0 -2.2 0.48 0.72 0 1 -0 +-0.2 -0 -2.6 0.48 0.76 0 1 -0 +-0.6 -0 -2.2 0.44 0.72 0 1 -0 +-0.2 -0 -2.2 0.48 0.72 0 1 -0 +0.2 -0 -2.6 0.52 0.76 0 1 -0 +-0.2 -0 -2.6 0.48 0.76 0 1 -0 +0.2 -0 -2.2 0.52 0.72 0 1 -0 +0.2 -0 -2.6 0.52 0.76 0 1 -0 +-0.2 -0 -2.2 0.48 0.72 0 1 -0 +0.2 -0 -2.2 0.52 0.72 0 1 -0 +0.6 -0 -2.6 0.56 0.76 0 1 -0 +0.2 -0 -2.6 0.52 0.76 0 1 -0 +0.6 -0 -2.2 0.56 0.72 0 1 -0 +0.6 -0 -2.6 0.56 0.76 0 1 -0 +0.2 -0 -2.2 0.52 0.72 0 1 -0 +0.6 -0 -2.2 0.56 0.72 0 1 -0 +1 -0 -2.6 0.6 0.76 0 1 -0 +0.6 -0 -2.6 0.56 0.76 0 1 -0 +1 -0 -2.2 0.6 0.72 0 1 -0 +1 -0 -2.6 0.6 0.76 0 1 -0 +0.6 -0 -2.2 0.56 0.72 0 1 -0 +1 -0 -2.2 0.6 0.72 0 1 -0 +1.4 -0 -2.6 0.64 0.76 0 1 -0 +1 -0 -2.6 0.6 0.76 0 1 -0 +1.4 -0 -2.2 0.64 0.72 0 1 -0 +1.4 -0 -2.6 0.64 0.76 0 1 -0 +1 -0 -2.2 0.6 0.72 0 1 -0 +1.4 -0 -2.2 0.64 0.72 0 1 -0 +1.8 -0 -2.6 0.68 0.76 0 1 -0 +1.4 -0 -2.6 0.64 0.76 0 1 -0 +1.8 -0 -2.2 0.68 0.72 0 1 -0 +1.8 -0 -2.6 0.68 0.76 0 1 -0 +1.4 -0 -2.2 0.64 0.72 0 1 -0 +1.8 -0 -2.2 0.68 0.72 0 1 -0 +2.2 -0 -2.6 0.72 0.76 0 1 -0 +1.8 -0 -2.6 0.68 0.76 0 1 -0 +2.2 -0 -2.2 0.72 0.72 0 1 -0 +2.2 -0 -2.6 0.72 0.76 0 1 -0 +1.8 -0 -2.2 0.68 0.72 0 1 -0 +2.2 -0 -2.2 0.72 0.72 0 1 -0 +2.6 -0 -2.6 0.76 0.76 0 1 -0 +2.2 -0 -2.6 0.72 0.76 0 1 -0 +2.6 -0 -2.2 0.76 0.72 0 1 -0 +2.6 -0 -2.6 0.76 0.76 0 1 -0 +2.2 -0 -2.2 0.72 0.72 0 1 -0 +2.6 -0 -2.2 0.76 0.72 0 1 -0 +3 -0 -2.6 0.8 0.76 0 1 -0 +2.6 -0 -2.6 0.76 0.76 0 1 -0 +3 -0 -2.2 0.8 0.72 0 1 -0 +3 -0 -2.6 0.8 0.76 0 1 -0 +2.6 -0 -2.2 0.76 0.72 0 1 -0 +3 -0 -2.2 0.8 0.72 0 1 -0 +3.4 -0 -2.6 0.84 0.76 0 1 -0 +3 -0 -2.6 0.8 0.76 0 1 -0 +3.4 -0 -2.2 0.84 0.72 0 1 -0 +3.4 -0 -2.6 0.84 0.76 0 1 -0 +3 -0 -2.2 0.8 0.72 0 1 -0 +3.4 -0 -2.2 0.84 0.72 0 1 -0 +3.8 -0 -2.6 0.88 0.76 0 1 -0 +3.4 -0 -2.6 0.84 0.76 0 1 -0 +3.8 -0 -2.2 0.88 0.72 0 1 -0 +3.8 -0 -2.6 0.88 0.76 0 1 -0 +3.4 -0 -2.2 0.84 0.72 0 1 -0 +3.8 -0 -2.2 0.88 0.72 0 1 -0 +4.2 -0 -2.6 0.92 0.76 0 1 -0 +3.8 -0 -2.6 0.88 0.76 0 1 -0 +4.2 -0 -2.2 0.92 0.72 0 1 -0 +4.2 -0 -2.6 0.92 0.76 0 1 -0 +3.8 -0 -2.2 0.88 0.72 0 1 -0 +4.2 -0 -2.2 0.92 0.72 0 1 -0 +4.6 -0 -2.6 0.96 0.76 0 1 -0 +4.2 -0 -2.6 0.92 0.76 0 1 -0 +4.6 -0 -2.2 0.96 0.72 0 1 -0 +4.6 -0 -2.6 0.96 0.76 0 1 -0 +4.2 -0 -2.2 0.92 0.72 0 1 -0 +4.6 -0 -2.2 0.96 0.72 0 1 -0 +5 -0 -2.6 1 0.76 0 1 -0 +4.6 -0 -2.6 0.96 0.76 0 1 -0 +5 -0 -2.2 1 0.72 0 1 -0 +5 -0 -2.6 1 0.76 0 1 -0 +4.6 -0 -2.2 0.96 0.72 0 1 -0 +-5 -0 -1.8 0 0.68 0 1 -0 +-4.6 -0 -2.2 0.04 0.72 0 1 -0 +-5 -0 -2.2 0 0.72 0 1 -0 +-4.6 -0 -1.8 0.04 0.68 0 1 -0 +-4.6 -0 -2.2 0.04 0.72 0 1 -0 +-5 -0 -1.8 0 0.68 0 1 -0 +-4.6 -0 -1.8 0.04 0.68 0 1 -0 +-4.2 -0 -2.2 0.08 0.72 0 1 -0 +-4.6 -0 -2.2 0.04 0.72 0 1 -0 +-4.2 -0 -1.8 0.08 0.68 0 1 -0 +-4.2 -0 -2.2 0.08 0.72 0 1 -0 +-4.6 -0 -1.8 0.04 0.68 0 1 -0 +-4.2 -0 -1.8 0.08 0.68 0 1 -0 +-3.8 -0 -2.2 0.12 0.72 0 1 -0 +-4.2 -0 -2.2 0.08 0.72 0 1 -0 +-3.8 -0 -1.8 0.12 0.68 0 1 -0 +-3.8 -0 -2.2 0.12 0.72 0 1 -0 +-4.2 -0 -1.8 0.08 0.68 0 1 -0 +-3.8 -0 -1.8 0.12 0.68 0 1 -0 +-3.4 -0 -2.2 0.16 0.72 0 1 -0 +-3.8 -0 -2.2 0.12 0.72 0 1 -0 +-3.4 -0 -1.8 0.16 0.68 0 1 -0 +-3.4 -0 -2.2 0.16 0.72 0 1 -0 +-3.8 -0 -1.8 0.12 0.68 0 1 -0 +-3.4 -0 -1.8 0.16 0.68 0 1 -0 +-3 -0 -2.2 0.2 0.72 0 1 -0 +-3.4 -0 -2.2 0.16 0.72 0 1 -0 +-3 -0 -1.8 0.2 0.68 0 1 -0 +-3 -0 -2.2 0.2 0.72 0 1 -0 +-3.4 -0 -1.8 0.16 0.68 0 1 -0 +-3 -0 -1.8 0.2 0.68 0 1 -0 +-2.6 -0 -2.2 0.24 0.72 0 1 -0 +-3 -0 -2.2 0.2 0.72 0 1 -0 +-2.6 -0 -1.8 0.24 0.68 0 1 -0 +-2.6 -0 -2.2 0.24 0.72 0 1 -0 +-3 -0 -1.8 0.2 0.68 0 1 -0 +-2.6 -0 -1.8 0.24 0.68 0 1 -0 +-2.2 -0 -2.2 0.28 0.72 0 1 -0 +-2.6 -0 -2.2 0.24 0.72 0 1 -0 +-2.2 -0 -1.8 0.28 0.68 0 1 -0 +-2.2 -0 -2.2 0.28 0.72 0 1 -0 +-2.6 -0 -1.8 0.24 0.68 0 1 -0 +-2.2 -0 -1.8 0.28 0.68 0 1 -0 +-1.8 -0 -2.2 0.32 0.72 0 1 -0 +-2.2 -0 -2.2 0.28 0.72 0 1 -0 +-1.8 -0 -1.8 0.32 0.68 0 1 -0 +-1.8 -0 -2.2 0.32 0.72 0 1 -0 +-2.2 -0 -1.8 0.28 0.68 0 1 -0 +-1.8 -0 -1.8 0.32 0.68 0 1 -0 +-1.4 -0 -2.2 0.36 0.72 0 1 -0 +-1.8 -0 -2.2 0.32 0.72 0 1 -0 +-1.4 -0 -1.8 0.36 0.68 0 1 -0 +-1.4 -0 -2.2 0.36 0.72 0 1 -0 +-1.8 -0 -1.8 0.32 0.68 0 1 -0 +-1.4 -0 -1.8 0.36 0.68 0 1 -0 +-1 -0 -2.2 0.4 0.72 0 1 -0 +-1.4 -0 -2.2 0.36 0.72 0 1 -0 +-1 -0 -1.8 0.4 0.68 0 1 -0 +-1 -0 -2.2 0.4 0.72 0 1 -0 +-1.4 -0 -1.8 0.36 0.68 0 1 -0 +-1 -0 -1.8 0.4 0.68 0 1 -0 +-0.6 -0 -2.2 0.44 0.72 0 1 -0 +-1 -0 -2.2 0.4 0.72 0 1 -0 +-0.6 -0 -1.8 0.44 0.68 0 1 -0 +-0.6 -0 -2.2 0.44 0.72 0 1 -0 +-1 -0 -1.8 0.4 0.68 0 1 -0 +-0.6 -0 -1.8 0.44 0.68 0 1 -0 +-0.2 -0 -2.2 0.48 0.72 0 1 -0 +-0.6 -0 -2.2 0.44 0.72 0 1 -0 +-0.2 -0 -1.8 0.48 0.68 0 1 -0 +-0.2 -0 -2.2 0.48 0.72 0 1 -0 +-0.6 -0 -1.8 0.44 0.68 0 1 -0 +-0.2 -0 -1.8 0.48 0.68 0 1 -0 +0.2 -0 -2.2 0.52 0.72 0 1 -0 +-0.2 -0 -2.2 0.48 0.72 0 1 -0 +0.2 -0 -1.8 0.52 0.68 0 1 -0 +0.2 -0 -2.2 0.52 0.72 0 1 -0 +-0.2 -0 -1.8 0.48 0.68 0 1 -0 +0.2 -0 -1.8 0.52 0.68 0 1 -0 +0.6 -0 -2.2 0.56 0.72 0 1 -0 +0.2 -0 -2.2 0.52 0.72 0 1 -0 +0.6 -0 -1.8 0.56 0.68 0 1 -0 +0.6 -0 -2.2 0.56 0.72 0 1 -0 +0.2 -0 -1.8 0.52 0.68 0 1 -0 +0.6 -0 -1.8 0.56 0.68 0 1 -0 +1 -0 -2.2 0.6 0.72 0 1 -0 +0.6 -0 -2.2 0.56 0.72 0 1 -0 +1 -0 -1.8 0.6 0.68 0 1 -0 +1 -0 -2.2 0.6 0.72 0 1 -0 +0.6 -0 -1.8 0.56 0.68 0 1 -0 +1 -0 -1.8 0.6 0.68 0 1 -0 +1.4 -0 -2.2 0.64 0.72 0 1 -0 +1 -0 -2.2 0.6 0.72 0 1 -0 +1.4 -0 -1.8 0.64 0.68 0 1 -0 +1.4 -0 -2.2 0.64 0.72 0 1 -0 +1 -0 -1.8 0.6 0.68 0 1 -0 +1.4 -0 -1.8 0.64 0.68 0 1 -0 +1.8 -0 -2.2 0.68 0.72 0 1 -0 +1.4 -0 -2.2 0.64 0.72 0 1 -0 +1.8 -0 -1.8 0.68 0.68 0 1 -0 +1.8 -0 -2.2 0.68 0.72 0 1 -0 +1.4 -0 -1.8 0.64 0.68 0 1 -0 +1.8 -0 -1.8 0.68 0.68 0 1 -0 +2.2 -0 -2.2 0.72 0.72 0 1 -0 +1.8 -0 -2.2 0.68 0.72 0 1 -0 +2.2 -0 -1.8 0.72 0.68 0 1 -0 +2.2 -0 -2.2 0.72 0.72 0 1 -0 +1.8 -0 -1.8 0.68 0.68 0 1 -0 +2.2 -0 -1.8 0.72 0.68 0 1 -0 +2.6 -0 -2.2 0.76 0.72 0 1 -0 +2.2 -0 -2.2 0.72 0.72 0 1 -0 +2.6 -0 -1.8 0.76 0.68 0 1 -0 +2.6 -0 -2.2 0.76 0.72 0 1 -0 +2.2 -0 -1.8 0.72 0.68 0 1 -0 +2.6 -0 -1.8 0.76 0.68 0 1 -0 +3 -0 -2.2 0.8 0.72 0 1 -0 +2.6 -0 -2.2 0.76 0.72 0 1 -0 +3 -0 -1.8 0.8 0.68 0 1 -0 +3 -0 -2.2 0.8 0.72 0 1 -0 +2.6 -0 -1.8 0.76 0.68 0 1 -0 +3 -0 -1.8 0.8 0.68 0 1 -0 +3.4 -0 -2.2 0.84 0.72 0 1 -0 +3 -0 -2.2 0.8 0.72 0 1 -0 +3.4 -0 -1.8 0.84 0.68 0 1 -0 +3.4 -0 -2.2 0.84 0.72 0 1 -0 +3 -0 -1.8 0.8 0.68 0 1 -0 +3.4 -0 -1.8 0.84 0.68 0 1 -0 +3.8 -0 -2.2 0.88 0.72 0 1 -0 +3.4 -0 -2.2 0.84 0.72 0 1 -0 +3.8 -0 -1.8 0.88 0.68 0 1 -0 +3.8 -0 -2.2 0.88 0.72 0 1 -0 +3.4 -0 -1.8 0.84 0.68 0 1 -0 +3.8 -0 -1.8 0.88 0.68 0 1 -0 +4.2 -0 -2.2 0.92 0.72 0 1 -0 +3.8 -0 -2.2 0.88 0.72 0 1 -0 +4.2 -0 -1.8 0.92 0.68 0 1 -0 +4.2 -0 -2.2 0.92 0.72 0 1 -0 +3.8 -0 -1.8 0.88 0.68 0 1 -0 +4.2 -0 -1.8 0.92 0.68 0 1 -0 +4.6 -0 -2.2 0.96 0.72 0 1 -0 +4.2 -0 -2.2 0.92 0.72 0 1 -0 +4.6 -0 -1.8 0.96 0.68 0 1 -0 +4.6 -0 -2.2 0.96 0.72 0 1 -0 +4.2 -0 -1.8 0.92 0.68 0 1 -0 +4.6 -0 -1.8 0.96 0.68 0 1 -0 +5 -0 -2.2 1 0.72 0 1 -0 +4.6 -0 -2.2 0.96 0.72 0 1 -0 +5 -0 -1.8 1 0.68 0 1 -0 +5 -0 -2.2 1 0.72 0 1 -0 +4.6 -0 -1.8 0.96 0.68 0 1 -0 +-5 -0 -1.4 0 0.64 0 1 -0 +-4.6 -0 -1.8 0.04 0.68 0 1 -0 +-5 -0 -1.8 0 0.68 0 1 -0 +-4.6 -0 -1.4 0.04 0.64 0 1 -0 +-4.6 -0 -1.8 0.04 0.68 0 1 -0 +-5 -0 -1.4 0 0.64 0 1 -0 +-4.6 -0 -1.4 0.04 0.64 0 1 -0 +-4.2 -0 -1.8 0.08 0.68 0 1 -0 +-4.6 -0 -1.8 0.04 0.68 0 1 -0 +-4.2 -0 -1.4 0.08 0.64 0 1 -0 +-4.2 -0 -1.8 0.08 0.68 0 1 -0 +-4.6 -0 -1.4 0.04 0.64 0 1 -0 +-4.2 -0 -1.4 0.08 0.64 0 1 -0 +-3.8 -0 -1.8 0.12 0.68 0 1 -0 +-4.2 -0 -1.8 0.08 0.68 0 1 -0 +-3.8 -0 -1.4 0.12 0.64 0 1 -0 +-3.8 -0 -1.8 0.12 0.68 0 1 -0 +-4.2 -0 -1.4 0.08 0.64 0 1 -0 +-3.8 -0 -1.4 0.12 0.64 0 1 -0 +-3.4 -0 -1.8 0.16 0.68 0 1 -0 +-3.8 -0 -1.8 0.12 0.68 0 1 -0 +-3.4 -0 -1.4 0.16 0.64 0 1 -0 +-3.4 -0 -1.8 0.16 0.68 0 1 -0 +-3.8 -0 -1.4 0.12 0.64 0 1 -0 +-3.4 -0 -1.4 0.16 0.64 0 1 -0 +-3 -0 -1.8 0.2 0.68 0 1 -0 +-3.4 -0 -1.8 0.16 0.68 0 1 -0 +-3 -0 -1.4 0.2 0.64 0 1 -0 +-3 -0 -1.8 0.2 0.68 0 1 -0 +-3.4 -0 -1.4 0.16 0.64 0 1 -0 +-3 -0 -1.4 0.2 0.64 0 1 -0 +-2.6 -0 -1.8 0.24 0.68 0 1 -0 +-3 -0 -1.8 0.2 0.68 0 1 -0 +-2.6 -0 -1.4 0.24 0.64 0 1 -0 +-2.6 -0 -1.8 0.24 0.68 0 1 -0 +-3 -0 -1.4 0.2 0.64 0 1 -0 +-2.6 -0 -1.4 0.24 0.64 0 1 -0 +-2.2 -0 -1.8 0.28 0.68 0 1 -0 +-2.6 -0 -1.8 0.24 0.68 0 1 -0 +-2.2 -0 -1.4 0.28 0.64 0 1 -0 +-2.2 -0 -1.8 0.28 0.68 0 1 -0 +-2.6 -0 -1.4 0.24 0.64 0 1 -0 +-2.2 -0 -1.4 0.28 0.64 0 1 -0 +-1.8 -0 -1.8 0.32 0.68 0 1 -0 +-2.2 -0 -1.8 0.28 0.68 0 1 -0 +-1.8 -0 -1.4 0.32 0.64 0 1 -0 +-1.8 -0 -1.8 0.32 0.68 0 1 -0 +-2.2 -0 -1.4 0.28 0.64 0 1 -0 +-1.8 -0 -1.4 0.32 0.64 0 1 -0 +-1.4 -0 -1.8 0.36 0.68 0 1 -0 +-1.8 -0 -1.8 0.32 0.68 0 1 -0 +-1.4 -0 -1.4 0.36 0.64 0 1 -0 +-1.4 -0 -1.8 0.36 0.68 0 1 -0 +-1.8 -0 -1.4 0.32 0.64 0 1 -0 +-1.4 -0 -1.4 0.36 0.64 0 1 -0 +-1 -0 -1.8 0.4 0.68 0 1 -0 +-1.4 -0 -1.8 0.36 0.68 0 1 -0 +-1 -0 -1.4 0.4 0.64 0 1 -0 +-1 -0 -1.8 0.4 0.68 0 1 -0 +-1.4 -0 -1.4 0.36 0.64 0 1 -0 +-1 -0 -1.4 0.4 0.64 0 1 -0 +-0.6 -0 -1.8 0.44 0.68 0 1 -0 +-1 -0 -1.8 0.4 0.68 0 1 -0 +-0.6 -0 -1.4 0.44 0.64 0 1 -0 +-0.6 -0 -1.8 0.44 0.68 0 1 -0 +-1 -0 -1.4 0.4 0.64 0 1 -0 +-0.6 -0 -1.4 0.44 0.64 0 1 -0 +-0.2 -0 -1.8 0.48 0.68 0 1 -0 +-0.6 -0 -1.8 0.44 0.68 0 1 -0 +-0.2 -0 -1.4 0.48 0.64 0 1 -0 +-0.2 -0 -1.8 0.48 0.68 0 1 -0 +-0.6 -0 -1.4 0.44 0.64 0 1 -0 +-0.2 -0 -1.4 0.48 0.64 0 1 -0 +0.2 -0 -1.8 0.52 0.68 0 1 -0 +-0.2 -0 -1.8 0.48 0.68 0 1 -0 +0.2 -0 -1.4 0.52 0.64 0 1 -0 +0.2 -0 -1.8 0.52 0.68 0 1 -0 +-0.2 -0 -1.4 0.48 0.64 0 1 -0 +0.2 -0 -1.4 0.52 0.64 0 1 -0 +0.6 -0 -1.8 0.56 0.68 0 1 -0 +0.2 -0 -1.8 0.52 0.68 0 1 -0 +0.6 -0 -1.4 0.56 0.64 0 1 -0 +0.6 -0 -1.8 0.56 0.68 0 1 -0 +0.2 -0 -1.4 0.52 0.64 0 1 -0 +0.6 -0 -1.4 0.56 0.64 0 1 -0 +1 -0 -1.8 0.6 0.68 0 1 -0 +0.6 -0 -1.8 0.56 0.68 0 1 -0 +1 -0 -1.4 0.6 0.64 0 1 -0 +1 -0 -1.8 0.6 0.68 0 1 -0 +0.6 -0 -1.4 0.56 0.64 0 1 -0 +1 -0 -1.4 0.6 0.64 0 1 -0 +1.4 -0 -1.8 0.64 0.68 0 1 -0 +1 -0 -1.8 0.6 0.68 0 1 -0 +1.4 -0 -1.4 0.64 0.64 0 1 -0 +1.4 -0 -1.8 0.64 0.68 0 1 -0 +1 -0 -1.4 0.6 0.64 0 1 -0 +1.4 -0 -1.4 0.64 0.64 0 1 -0 +1.8 -0 -1.8 0.68 0.68 0 1 -0 +1.4 -0 -1.8 0.64 0.68 0 1 -0 +1.8 -0 -1.4 0.68 0.64 0 1 -0 +1.8 -0 -1.8 0.68 0.68 0 1 -0 +1.4 -0 -1.4 0.64 0.64 0 1 -0 +1.8 -0 -1.4 0.68 0.64 0 1 -0 +2.2 -0 -1.8 0.72 0.68 0 1 -0 +1.8 -0 -1.8 0.68 0.68 0 1 -0 +2.2 -0 -1.4 0.72 0.64 0 1 -0 +2.2 -0 -1.8 0.72 0.68 0 1 -0 +1.8 -0 -1.4 0.68 0.64 0 1 -0 +2.2 -0 -1.4 0.72 0.64 0 1 -0 +2.6 -0 -1.8 0.76 0.68 0 1 -0 +2.2 -0 -1.8 0.72 0.68 0 1 -0 +2.6 -0 -1.4 0.76 0.64 0 1 -0 +2.6 -0 -1.8 0.76 0.68 0 1 -0 +2.2 -0 -1.4 0.72 0.64 0 1 -0 +2.6 -0 -1.4 0.76 0.64 0 1 -0 +3 -0 -1.8 0.8 0.68 0 1 -0 +2.6 -0 -1.8 0.76 0.68 0 1 -0 +3 -0 -1.4 0.8 0.64 0 1 -0 +3 -0 -1.8 0.8 0.68 0 1 -0 +2.6 -0 -1.4 0.76 0.64 0 1 -0 +3 -0 -1.4 0.8 0.64 0 1 -0 +3.4 -0 -1.8 0.84 0.68 0 1 -0 +3 -0 -1.8 0.8 0.68 0 1 -0 +3.4 -0 -1.4 0.84 0.64 0 1 -0 +3.4 -0 -1.8 0.84 0.68 0 1 -0 +3 -0 -1.4 0.8 0.64 0 1 -0 +3.4 -0 -1.4 0.84 0.64 0 1 -0 +3.8 -0 -1.8 0.88 0.68 0 1 -0 +3.4 -0 -1.8 0.84 0.68 0 1 -0 +3.8 -0 -1.4 0.88 0.64 0 1 -0 +3.8 -0 -1.8 0.88 0.68 0 1 -0 +3.4 -0 -1.4 0.84 0.64 0 1 -0 +3.8 -0 -1.4 0.88 0.64 0 1 -0 +4.2 -0 -1.8 0.92 0.68 0 1 -0 +3.8 -0 -1.8 0.88 0.68 0 1 -0 +4.2 -0 -1.4 0.92 0.64 0 1 -0 +4.2 -0 -1.8 0.92 0.68 0 1 -0 +3.8 -0 -1.4 0.88 0.64 0 1 -0 +4.2 -0 -1.4 0.92 0.64 0 1 -0 +4.6 -0 -1.8 0.96 0.68 0 1 -0 +4.2 -0 -1.8 0.92 0.68 0 1 -0 +4.6 -0 -1.4 0.96 0.64 0 1 -0 +4.6 -0 -1.8 0.96 0.68 0 1 -0 +4.2 -0 -1.4 0.92 0.64 0 1 -0 +4.6 -0 -1.4 0.96 0.64 0 1 -0 +5 -0 -1.8 1 0.68 0 1 -0 +4.6 -0 -1.8 0.96 0.68 0 1 -0 +5 -0 -1.4 1 0.64 0 1 -0 +5 -0 -1.8 1 0.68 0 1 -0 +4.6 -0 -1.4 0.96 0.64 0 1 -0 +-5 -0 -1 0 0.6 0 1 -0 +-4.6 -0 -1.4 0.04 0.64 0 1 -0 +-5 -0 -1.4 0 0.64 0 1 -0 +-4.6 -0 -1 0.04 0.6 0 1 -0 +-4.6 -0 -1.4 0.04 0.64 0 1 -0 +-5 -0 -1 0 0.6 0 1 -0 +-4.6 -0 -1 0.04 0.6 0 1 -0 +-4.2 -0 -1.4 0.08 0.64 0 1 -0 +-4.6 -0 -1.4 0.04 0.64 0 1 -0 +-4.2 -0 -1 0.08 0.6 0 1 -0 +-4.2 -0 -1.4 0.08 0.64 0 1 -0 +-4.6 -0 -1 0.04 0.6 0 1 -0 +-4.2 -0 -1 0.08 0.6 0 1 -0 +-3.8 -0 -1.4 0.12 0.64 0 1 -0 +-4.2 -0 -1.4 0.08 0.64 0 1 -0 +-3.8 -0 -1 0.12 0.6 0 1 -0 +-3.8 -0 -1.4 0.12 0.64 0 1 -0 +-4.2 -0 -1 0.08 0.6 0 1 -0 +-3.8 -0 -1 0.12 0.6 0 1 -0 +-3.4 -0 -1.4 0.16 0.64 0 1 -0 +-3.8 -0 -1.4 0.12 0.64 0 1 -0 +-3.4 -0 -1 0.16 0.6 0 1 -0 +-3.4 -0 -1.4 0.16 0.64 0 1 -0 +-3.8 -0 -1 0.12 0.6 0 1 -0 +-3.4 -0 -1 0.16 0.6 0 1 -0 +-3 -0 -1.4 0.2 0.64 0 1 -0 +-3.4 -0 -1.4 0.16 0.64 0 1 -0 +-3 -0 -1 0.2 0.6 0 1 -0 +-3 -0 -1.4 0.2 0.64 0 1 -0 +-3.4 -0 -1 0.16 0.6 0 1 -0 +-3 -0 -1 0.2 0.6 0 1 -0 +-2.6 -0 -1.4 0.24 0.64 0 1 -0 +-3 -0 -1.4 0.2 0.64 0 1 -0 +-2.6 -0 -1 0.24 0.6 0 1 -0 +-2.6 -0 -1.4 0.24 0.64 0 1 -0 +-3 -0 -1 0.2 0.6 0 1 -0 +-2.6 -0 -1 0.24 0.6 0 1 -0 +-2.2 -0 -1.4 0.28 0.64 0 1 -0 +-2.6 -0 -1.4 0.24 0.64 0 1 -0 +-2.2 -0 -1 0.28 0.6 0 1 -0 +-2.2 -0 -1.4 0.28 0.64 0 1 -0 +-2.6 -0 -1 0.24 0.6 0 1 -0 +-2.2 -0 -1 0.28 0.6 0 1 -0 +-1.8 -0 -1.4 0.32 0.64 0 1 -0 +-2.2 -0 -1.4 0.28 0.64 0 1 -0 +-1.8 -0 -1 0.32 0.6 0 1 -0 +-1.8 -0 -1.4 0.32 0.64 0 1 -0 +-2.2 -0 -1 0.28 0.6 0 1 -0 +-1.8 -0 -1 0.32 0.6 0 1 -0 +-1.4 -0 -1.4 0.36 0.64 0 1 -0 +-1.8 -0 -1.4 0.32 0.64 0 1 -0 +-1.4 -0 -1 0.36 0.6 0 1 -0 +-1.4 -0 -1.4 0.36 0.64 0 1 -0 +-1.8 -0 -1 0.32 0.6 0 1 -0 +-1.4 -0 -1 0.36 0.6 0 1 -0 +-1 -0 -1.4 0.4 0.64 0 1 -0 +-1.4 -0 -1.4 0.36 0.64 0 1 -0 +-1 -0 -1 0.4 0.6 0 1 -0 +-1 -0 -1.4 0.4 0.64 0 1 -0 +-1.4 -0 -1 0.36 0.6 0 1 -0 +-1 -0 -1 0.4 0.6 0 1 -0 +-0.6 -0 -1.4 0.44 0.64 0 1 -0 +-1 -0 -1.4 0.4 0.64 0 1 -0 +-0.6 -0 -1 0.44 0.6 0 1 -0 +-0.6 -0 -1.4 0.44 0.64 0 1 -0 +-1 -0 -1 0.4 0.6 0 1 -0 +-0.6 -0 -1 0.44 0.6 0 1 -0 +-0.2 -0 -1.4 0.48 0.64 0 1 -0 +-0.6 -0 -1.4 0.44 0.64 0 1 -0 +-0.2 -0 -1 0.48 0.6 0 1 -0 +-0.2 -0 -1.4 0.48 0.64 0 1 -0 +-0.6 -0 -1 0.44 0.6 0 1 -0 +-0.2 -0 -1 0.48 0.6 0 1 -0 +0.2 -0 -1.4 0.52 0.64 0 1 -0 +-0.2 -0 -1.4 0.48 0.64 0 1 -0 +0.2 -0 -1 0.52 0.6 0 1 -0 +0.2 -0 -1.4 0.52 0.64 0 1 -0 +-0.2 -0 -1 0.48 0.6 0 1 -0 +0.2 -0 -1 0.52 0.6 0 1 -0 +0.6 -0 -1.4 0.56 0.64 0 1 -0 +0.2 -0 -1.4 0.52 0.64 0 1 -0 +0.6 -0 -1 0.56 0.6 0 1 -0 +0.6 -0 -1.4 0.56 0.64 0 1 -0 +0.2 -0 -1 0.52 0.6 0 1 -0 +0.6 -0 -1 0.56 0.6 0 1 -0 +1 -0 -1.4 0.6 0.64 0 1 -0 +0.6 -0 -1.4 0.56 0.64 0 1 -0 +1 -0 -1 0.6 0.6 0 1 -0 +1 -0 -1.4 0.6 0.64 0 1 -0 +0.6 -0 -1 0.56 0.6 0 1 -0 +1 -0 -1 0.6 0.6 0 1 -0 +1.4 -0 -1.4 0.64 0.64 0 1 -0 +1 -0 -1.4 0.6 0.64 0 1 -0 +1.4 -0 -1 0.64 0.6 0 1 -0 +1.4 -0 -1.4 0.64 0.64 0 1 -0 +1 -0 -1 0.6 0.6 0 1 -0 +1.4 -0 -1 0.64 0.6 0 1 -0 +1.8 -0 -1.4 0.68 0.64 0 1 -0 +1.4 -0 -1.4 0.64 0.64 0 1 -0 +1.8 -0 -1 0.68 0.6 0 1 -0 +1.8 -0 -1.4 0.68 0.64 0 1 -0 +1.4 -0 -1 0.64 0.6 0 1 -0 +1.8 -0 -1 0.68 0.6 0 1 -0 +2.2 -0 -1.4 0.72 0.64 0 1 -0 +1.8 -0 -1.4 0.68 0.64 0 1 -0 +2.2 -0 -1 0.72 0.6 0 1 -0 +2.2 -0 -1.4 0.72 0.64 0 1 -0 +1.8 -0 -1 0.68 0.6 0 1 -0 +2.2 -0 -1 0.72 0.6 0 1 -0 +2.6 -0 -1.4 0.76 0.64 0 1 -0 +2.2 -0 -1.4 0.72 0.64 0 1 -0 +2.6 -0 -1 0.76 0.6 0 1 -0 +2.6 -0 -1.4 0.76 0.64 0 1 -0 +2.2 -0 -1 0.72 0.6 0 1 -0 +2.6 -0 -1 0.76 0.6 0 1 -0 +3 -0 -1.4 0.8 0.64 0 1 -0 +2.6 -0 -1.4 0.76 0.64 0 1 -0 +3 -0 -1 0.8 0.6 0 1 -0 +3 -0 -1.4 0.8 0.64 0 1 -0 +2.6 -0 -1 0.76 0.6 0 1 -0 +3 -0 -1 0.8 0.6 0 1 -0 +3.4 -0 -1.4 0.84 0.64 0 1 -0 +3 -0 -1.4 0.8 0.64 0 1 -0 +3.4 -0 -1 0.84 0.6 0 1 -0 +3.4 -0 -1.4 0.84 0.64 0 1 -0 +3 -0 -1 0.8 0.6 0 1 -0 +3.4 -0 -1 0.84 0.6 0 1 -0 +3.8 -0 -1.4 0.88 0.64 0 1 -0 +3.4 -0 -1.4 0.84 0.64 0 1 -0 +3.8 -0 -1 0.88 0.6 0 1 -0 +3.8 -0 -1.4 0.88 0.64 0 1 -0 +3.4 -0 -1 0.84 0.6 0 1 -0 +3.8 -0 -1 0.88 0.6 0 1 -0 +4.2 -0 -1.4 0.92 0.64 0 1 -0 +3.8 -0 -1.4 0.88 0.64 0 1 -0 +4.2 -0 -1 0.92 0.6 0 1 -0 +4.2 -0 -1.4 0.92 0.64 0 1 -0 +3.8 -0 -1 0.88 0.6 0 1 -0 +4.2 -0 -1 0.92 0.6 0 1 -0 +4.6 -0 -1.4 0.96 0.64 0 1 -0 +4.2 -0 -1.4 0.92 0.64 0 1 -0 +4.6 -0 -1 0.96 0.6 0 1 -0 +4.6 -0 -1.4 0.96 0.64 0 1 -0 +4.2 -0 -1 0.92 0.6 0 1 -0 +4.6 -0 -1 0.96 0.6 0 1 -0 +5 -0 -1.4 1 0.64 0 1 -0 +4.6 -0 -1.4 0.96 0.64 0 1 -0 +5 -0 -1 1 0.6 0 1 -0 +5 -0 -1.4 1 0.64 0 1 -0 +4.6 -0 -1 0.96 0.6 0 1 -0 +-5 -0 -0.6 0 0.56 0 1 -0 +-4.6 -0 -1 0.04 0.6 0 1 -0 +-5 -0 -1 0 0.6 0 1 -0 +-4.6 -0 -0.6 0.04 0.56 0 1 -0 +-4.6 -0 -1 0.04 0.6 0 1 -0 +-5 -0 -0.6 0 0.56 0 1 -0 +-4.6 -0 -0.6 0.04 0.56 0 1 -0 +-4.2 -0 -1 0.08 0.6 0 1 -0 +-4.6 -0 -1 0.04 0.6 0 1 -0 +-4.2 -0 -0.6 0.08 0.56 0 1 -0 +-4.2 -0 -1 0.08 0.6 0 1 -0 +-4.6 -0 -0.6 0.04 0.56 0 1 -0 +-4.2 -0 -0.6 0.08 0.56 0 1 -0 +-3.8 -0 -1 0.12 0.6 0 1 -0 +-4.2 -0 -1 0.08 0.6 0 1 -0 +-3.8 -0 -0.6 0.12 0.56 0 1 -0 +-3.8 -0 -1 0.12 0.6 0 1 -0 +-4.2 -0 -0.6 0.08 0.56 0 1 -0 +-3.8 -0 -0.6 0.12 0.56 0 1 -0 +-3.4 -0 -1 0.16 0.6 0 1 -0 +-3.8 -0 -1 0.12 0.6 0 1 -0 +-3.4 -0 -0.6 0.16 0.56 0 1 -0 +-3.4 -0 -1 0.16 0.6 0 1 -0 +-3.8 -0 -0.6 0.12 0.56 0 1 -0 +-3.4 -0 -0.6 0.16 0.56 0 1 -0 +-3 -0 -1 0.2 0.6 0 1 -0 +-3.4 -0 -1 0.16 0.6 0 1 -0 +-3 -0 -0.6 0.2 0.56 0 1 -0 +-3 -0 -1 0.2 0.6 0 1 -0 +-3.4 -0 -0.6 0.16 0.56 0 1 -0 +-3 -0 -0.6 0.2 0.56 0 1 -0 +-2.6 -0 -1 0.24 0.6 0 1 -0 +-3 -0 -1 0.2 0.6 0 1 -0 +-2.6 -0 -0.6 0.24 0.56 0 1 -0 +-2.6 -0 -1 0.24 0.6 0 1 -0 +-3 -0 -0.6 0.2 0.56 0 1 -0 +-2.6 -0 -0.6 0.24 0.56 0 1 -0 +-2.2 -0 -1 0.28 0.6 0 1 -0 +-2.6 -0 -1 0.24 0.6 0 1 -0 +-2.2 -0 -0.6 0.28 0.56 0 1 -0 +-2.2 -0 -1 0.28 0.6 0 1 -0 +-2.6 -0 -0.6 0.24 0.56 0 1 -0 +-2.2 -0 -0.6 0.28 0.56 0 1 -0 +-1.8 -0 -1 0.32 0.6 0 1 -0 +-2.2 -0 -1 0.28 0.6 0 1 -0 +-1.8 -0 -0.6 0.32 0.56 0 1 -0 +-1.8 -0 -1 0.32 0.6 0 1 -0 +-2.2 -0 -0.6 0.28 0.56 0 1 -0 +-1.8 -0 -0.6 0.32 0.56 0 1 -0 +-1.4 -0 -1 0.36 0.6 0 1 -0 +-1.8 -0 -1 0.32 0.6 0 1 -0 +-1.4 -0 -0.6 0.36 0.56 0 1 -0 +-1.4 -0 -1 0.36 0.6 0 1 -0 +-1.8 -0 -0.6 0.32 0.56 0 1 -0 +-1.4 -0 -0.6 0.36 0.56 0 1 -0 +-1 -0 -1 0.4 0.6 0 1 -0 +-1.4 -0 -1 0.36 0.6 0 1 -0 +-1 -0 -0.6 0.4 0.56 0 1 -0 +-1 -0 -1 0.4 0.6 0 1 -0 +-1.4 -0 -0.6 0.36 0.56 0 1 -0 +-1 -0 -0.6 0.4 0.56 0 1 -0 +-0.6 -0 -1 0.44 0.6 0 1 -0 +-1 -0 -1 0.4 0.6 0 1 -0 +-0.6 -0 -0.6 0.44 0.56 0 1 -0 +-0.6 -0 -1 0.44 0.6 0 1 -0 +-1 -0 -0.6 0.4 0.56 0 1 -0 +-0.6 -0 -0.6 0.44 0.56 0 1 -0 +-0.2 -0 -1 0.48 0.6 0 1 -0 +-0.6 -0 -1 0.44 0.6 0 1 -0 +-0.2 -0 -0.6 0.48 0.56 0 1 -0 +-0.2 -0 -1 0.48 0.6 0 1 -0 +-0.6 -0 -0.6 0.44 0.56 0 1 -0 +-0.2 -0 -0.6 0.48 0.56 0 1 -0 +0.2 -0 -1 0.52 0.6 0 1 -0 +-0.2 -0 -1 0.48 0.6 0 1 -0 +0.2 -0 -0.6 0.52 0.56 0 1 -0 +0.2 -0 -1 0.52 0.6 0 1 -0 +-0.2 -0 -0.6 0.48 0.56 0 1 -0 +0.2 -0 -0.6 0.52 0.56 0 1 -0 +0.6 -0 -1 0.56 0.6 0 1 -0 +0.2 -0 -1 0.52 0.6 0 1 -0 +0.6 -0 -0.6 0.56 0.56 0 1 -0 +0.6 -0 -1 0.56 0.6 0 1 -0 +0.2 -0 -0.6 0.52 0.56 0 1 -0 +0.6 -0 -0.6 0.56 0.56 0 1 -0 +1 -0 -1 0.6 0.6 0 1 -0 +0.6 -0 -1 0.56 0.6 0 1 -0 +1 -0 -0.6 0.6 0.56 0 1 -0 +1 -0 -1 0.6 0.6 0 1 -0 +0.6 -0 -0.6 0.56 0.56 0 1 -0 +1 -0 -0.6 0.6 0.56 0 1 -0 +1.4 -0 -1 0.64 0.6 0 1 -0 +1 -0 -1 0.6 0.6 0 1 -0 +1.4 -0 -0.6 0.64 0.56 0 1 -0 +1.4 -0 -1 0.64 0.6 0 1 -0 +1 -0 -0.6 0.6 0.56 0 1 -0 +1.4 -0 -0.6 0.64 0.56 0 1 -0 +1.8 -0 -1 0.68 0.6 0 1 -0 +1.4 -0 -1 0.64 0.6 0 1 -0 +1.8 -0 -0.6 0.68 0.56 0 1 -0 +1.8 -0 -1 0.68 0.6 0 1 -0 +1.4 -0 -0.6 0.64 0.56 0 1 -0 +1.8 -0 -0.6 0.68 0.56 0 1 -0 +2.2 -0 -1 0.72 0.6 0 1 -0 +1.8 -0 -1 0.68 0.6 0 1 -0 +2.2 -0 -0.6 0.72 0.56 0 1 -0 +2.2 -0 -1 0.72 0.6 0 1 -0 +1.8 -0 -0.6 0.68 0.56 0 1 -0 +2.2 -0 -0.6 0.72 0.56 0 1 -0 +2.6 -0 -1 0.76 0.6 0 1 -0 +2.2 -0 -1 0.72 0.6 0 1 -0 +2.6 -0 -0.6 0.76 0.56 0 1 -0 +2.6 -0 -1 0.76 0.6 0 1 -0 +2.2 -0 -0.6 0.72 0.56 0 1 -0 +2.6 -0 -0.6 0.76 0.56 0 1 -0 +3 -0 -1 0.8 0.6 0 1 -0 +2.6 -0 -1 0.76 0.6 0 1 -0 +3 -0 -0.6 0.8 0.56 0 1 -0 +3 -0 -1 0.8 0.6 0 1 -0 +2.6 -0 -0.6 0.76 0.56 0 1 -0 +3 -0 -0.6 0.8 0.56 0 1 -0 +3.4 -0 -1 0.84 0.6 0 1 -0 +3 -0 -1 0.8 0.6 0 1 -0 +3.4 -0 -0.6 0.84 0.56 0 1 -0 +3.4 -0 -1 0.84 0.6 0 1 -0 +3 -0 -0.6 0.8 0.56 0 1 -0 +3.4 -0 -0.6 0.84 0.56 0 1 -0 +3.8 -0 -1 0.88 0.6 0 1 -0 +3.4 -0 -1 0.84 0.6 0 1 -0 +3.8 -0 -0.6 0.88 0.56 0 1 -0 +3.8 -0 -1 0.88 0.6 0 1 -0 +3.4 -0 -0.6 0.84 0.56 0 1 -0 +3.8 -0 -0.6 0.88 0.56 0 1 -0 +4.2 -0 -1 0.92 0.6 0 1 -0 +3.8 -0 -1 0.88 0.6 0 1 -0 +4.2 -0 -0.6 0.92 0.56 0 1 -0 +4.2 -0 -1 0.92 0.6 0 1 -0 +3.8 -0 -0.6 0.88 0.56 0 1 -0 +4.2 -0 -0.6 0.92 0.56 0 1 -0 +4.6 -0 -1 0.96 0.6 0 1 -0 +4.2 -0 -1 0.92 0.6 0 1 -0 +4.6 -0 -0.6 0.96 0.56 0 1 -0 +4.6 -0 -1 0.96 0.6 0 1 -0 +4.2 -0 -0.6 0.92 0.56 0 1 -0 +4.6 -0 -0.6 0.96 0.56 0 1 -0 +5 -0 -1 1 0.6 0 1 -0 +4.6 -0 -1 0.96 0.6 0 1 -0 +5 -0 -0.6 1 0.56 0 1 -0 +5 -0 -1 1 0.6 0 1 -0 +4.6 -0 -0.6 0.96 0.56 0 1 -0 +-5 -0 -0.2 0 0.52 0 1 -0 +-4.6 -0 -0.6 0.04 0.56 0 1 -0 +-5 -0 -0.6 0 0.56 0 1 -0 +-4.6 -0 -0.2 0.04 0.52 0 1 -0 +-4.6 -0 -0.6 0.04 0.56 0 1 -0 +-5 -0 -0.2 0 0.52 0 1 -0 +-4.6 -0 -0.2 0.04 0.52 0 1 -0 +-4.2 -0 -0.6 0.08 0.56 0 1 -0 +-4.6 -0 -0.6 0.04 0.56 0 1 -0 +-4.2 -0 -0.2 0.08 0.52 0 1 -0 +-4.2 -0 -0.6 0.08 0.56 0 1 -0 +-4.6 -0 -0.2 0.04 0.52 0 1 -0 +-4.2 -0 -0.2 0.08 0.52 0 1 -0 +-3.8 -0 -0.6 0.12 0.56 0 1 -0 +-4.2 -0 -0.6 0.08 0.56 0 1 -0 +-3.8 -0 -0.2 0.12 0.52 0 1 -0 +-3.8 -0 -0.6 0.12 0.56 0 1 -0 +-4.2 -0 -0.2 0.08 0.52 0 1 -0 +-3.8 -0 -0.2 0.12 0.52 0 1 -0 +-3.4 -0 -0.6 0.16 0.56 0 1 -0 +-3.8 -0 -0.6 0.12 0.56 0 1 -0 +-3.4 -0 -0.2 0.16 0.52 0 1 -0 +-3.4 -0 -0.6 0.16 0.56 0 1 -0 +-3.8 -0 -0.2 0.12 0.52 0 1 -0 +-3.4 -0 -0.2 0.16 0.52 0 1 -0 +-3 -0 -0.6 0.2 0.56 0 1 -0 +-3.4 -0 -0.6 0.16 0.56 0 1 -0 +-3 -0 -0.2 0.2 0.52 0 1 -0 +-3 -0 -0.6 0.2 0.56 0 1 -0 +-3.4 -0 -0.2 0.16 0.52 0 1 -0 +-3 -0 -0.2 0.2 0.52 0 1 -0 +-2.6 -0 -0.6 0.24 0.56 0 1 -0 +-3 -0 -0.6 0.2 0.56 0 1 -0 +-2.6 -0 -0.2 0.24 0.52 0 1 -0 +-2.6 -0 -0.6 0.24 0.56 0 1 -0 +-3 -0 -0.2 0.2 0.52 0 1 -0 +-2.6 -0 -0.2 0.24 0.52 0 1 -0 +-2.2 -0 -0.6 0.28 0.56 0 1 -0 +-2.6 -0 -0.6 0.24 0.56 0 1 -0 +-2.2 -0 -0.2 0.28 0.52 0 1 -0 +-2.2 -0 -0.6 0.28 0.56 0 1 -0 +-2.6 -0 -0.2 0.24 0.52 0 1 -0 +-2.2 -0 -0.2 0.28 0.52 0 1 -0 +-1.8 -0 -0.6 0.32 0.56 0 1 -0 +-2.2 -0 -0.6 0.28 0.56 0 1 -0 +-1.8 -0 -0.2 0.32 0.52 0 1 -0 +-1.8 -0 -0.6 0.32 0.56 0 1 -0 +-2.2 -0 -0.2 0.28 0.52 0 1 -0 +-1.8 -0 -0.2 0.32 0.52 0 1 -0 +-1.4 -0 -0.6 0.36 0.56 0 1 -0 +-1.8 -0 -0.6 0.32 0.56 0 1 -0 +-1.4 -0 -0.2 0.36 0.52 0 1 -0 +-1.4 -0 -0.6 0.36 0.56 0 1 -0 +-1.8 -0 -0.2 0.32 0.52 0 1 -0 +-1.4 -0 -0.2 0.36 0.52 0 1 -0 +-1 -0 -0.6 0.4 0.56 0 1 -0 +-1.4 -0 -0.6 0.36 0.56 0 1 -0 +-1 -0 -0.2 0.4 0.52 0 1 -0 +-1 -0 -0.6 0.4 0.56 0 1 -0 +-1.4 -0 -0.2 0.36 0.52 0 1 -0 +-1 -0 -0.2 0.4 0.52 0 1 -0 +-0.6 -0 -0.6 0.44 0.56 0 1 -0 +-1 -0 -0.6 0.4 0.56 0 1 -0 +-0.6 -0 -0.2 0.44 0.52 0 1 -0 +-0.6 -0 -0.6 0.44 0.56 0 1 -0 +-1 -0 -0.2 0.4 0.52 0 1 -0 +-0.6 -0 -0.2 0.44 0.52 0 1 -0 +-0.2 -0 -0.6 0.48 0.56 0 1 -0 +-0.6 -0 -0.6 0.44 0.56 0 1 -0 +-0.2 -0 -0.2 0.48 0.52 0 1 -0 +-0.2 -0 -0.6 0.48 0.56 0 1 -0 +-0.6 -0 -0.2 0.44 0.52 0 1 -0 +-0.2 -0 -0.2 0.48 0.52 0 1 -0 +0.2 -0 -0.6 0.52 0.56 0 1 -0 +-0.2 -0 -0.6 0.48 0.56 0 1 -0 +0.2 -0 -0.2 0.52 0.52 0 1 -0 +0.2 -0 -0.6 0.52 0.56 0 1 -0 +-0.2 -0 -0.2 0.48 0.52 0 1 -0 +0.2 -0 -0.2 0.52 0.52 0 1 -0 +0.6 -0 -0.6 0.56 0.56 0 1 -0 +0.2 -0 -0.6 0.52 0.56 0 1 -0 +0.6 -0 -0.2 0.56 0.52 0 1 -0 +0.6 -0 -0.6 0.56 0.56 0 1 -0 +0.2 -0 -0.2 0.52 0.52 0 1 -0 +0.6 -0 -0.2 0.56 0.52 0 1 -0 +1 -0 -0.6 0.6 0.56 0 1 -0 +0.6 -0 -0.6 0.56 0.56 0 1 -0 +1 -0 -0.2 0.6 0.52 0 1 -0 +1 -0 -0.6 0.6 0.56 0 1 -0 +0.6 -0 -0.2 0.56 0.52 0 1 -0 +1 -0 -0.2 0.6 0.52 0 1 -0 +1.4 -0 -0.6 0.64 0.56 0 1 -0 +1 -0 -0.6 0.6 0.56 0 1 -0 +1.4 -0 -0.2 0.64 0.52 0 1 -0 +1.4 -0 -0.6 0.64 0.56 0 1 -0 +1 -0 -0.2 0.6 0.52 0 1 -0 +1.4 -0 -0.2 0.64 0.52 0 1 -0 +1.8 -0 -0.6 0.68 0.56 0 1 -0 +1.4 -0 -0.6 0.64 0.56 0 1 -0 +1.8 -0 -0.2 0.68 0.52 0 1 -0 +1.8 -0 -0.6 0.68 0.56 0 1 -0 +1.4 -0 -0.2 0.64 0.52 0 1 -0 +1.8 -0 -0.2 0.68 0.52 0 1 -0 +2.2 -0 -0.6 0.72 0.56 0 1 -0 +1.8 -0 -0.6 0.68 0.56 0 1 -0 +2.2 -0 -0.2 0.72 0.52 0 1 -0 +2.2 -0 -0.6 0.72 0.56 0 1 -0 +1.8 -0 -0.2 0.68 0.52 0 1 -0 +2.2 -0 -0.2 0.72 0.52 0 1 -0 +2.6 -0 -0.6 0.76 0.56 0 1 -0 +2.2 -0 -0.6 0.72 0.56 0 1 -0 +2.6 -0 -0.2 0.76 0.52 0 1 -0 +2.6 -0 -0.6 0.76 0.56 0 1 -0 +2.2 -0 -0.2 0.72 0.52 0 1 -0 +2.6 -0 -0.2 0.76 0.52 0 1 -0 +3 -0 -0.6 0.8 0.56 0 1 -0 +2.6 -0 -0.6 0.76 0.56 0 1 -0 +3 -0 -0.2 0.8 0.52 0 1 -0 +3 -0 -0.6 0.8 0.56 0 1 -0 +2.6 -0 -0.2 0.76 0.52 0 1 -0 +3 -0 -0.2 0.8 0.52 0 1 -0 +3.4 -0 -0.6 0.84 0.56 0 1 -0 +3 -0 -0.6 0.8 0.56 0 1 -0 +3.4 -0 -0.2 0.84 0.52 0 1 -0 +3.4 -0 -0.6 0.84 0.56 0 1 -0 +3 -0 -0.2 0.8 0.52 0 1 -0 +3.4 -0 -0.2 0.84 0.52 0 1 -0 +3.8 -0 -0.6 0.88 0.56 0 1 -0 +3.4 -0 -0.6 0.84 0.56 0 1 -0 +3.8 -0 -0.2 0.88 0.52 0 1 -0 +3.8 -0 -0.6 0.88 0.56 0 1 -0 +3.4 -0 -0.2 0.84 0.52 0 1 -0 +3.8 -0 -0.2 0.88 0.52 0 1 -0 +4.2 -0 -0.6 0.92 0.56 0 1 -0 +3.8 -0 -0.6 0.88 0.56 0 1 -0 +4.2 -0 -0.2 0.92 0.52 0 1 -0 +4.2 -0 -0.6 0.92 0.56 0 1 -0 +3.8 -0 -0.2 0.88 0.52 0 1 -0 +4.2 -0 -0.2 0.92 0.52 0 1 -0 +4.6 -0 -0.6 0.96 0.56 0 1 -0 +4.2 -0 -0.6 0.92 0.56 0 1 -0 +4.6 -0 -0.2 0.96 0.52 0 1 -0 +4.6 -0 -0.6 0.96 0.56 0 1 -0 +4.2 -0 -0.2 0.92 0.52 0 1 -0 +4.6 -0 -0.2 0.96 0.52 0 1 -0 +5 -0 -0.6 1 0.56 0 1 -0 +4.6 -0 -0.6 0.96 0.56 0 1 -0 +5 -0 -0.2 1 0.52 0 1 -0 +5 -0 -0.6 1 0.56 0 1 -0 +4.6 -0 -0.2 0.96 0.52 0 1 -0 +-5 0 0.2 0 0.48 0 1 -0 +-4.6 -0 -0.2 0.04 0.52 0 1 -0 +-5 -0 -0.2 0 0.52 0 1 -0 +-4.6 0 0.2 0.04 0.48 0 1 -0 +-4.6 -0 -0.2 0.04 0.52 0 1 -0 +-5 0 0.2 0 0.48 0 1 -0 +-4.6 0 0.2 0.04 0.48 0 1 -0 +-4.2 -0 -0.2 0.08 0.52 0 1 -0 +-4.6 -0 -0.2 0.04 0.52 0 1 -0 +-4.2 0 0.2 0.08 0.48 0 1 -0 +-4.2 -0 -0.2 0.08 0.52 0 1 -0 +-4.6 0 0.2 0.04 0.48 0 1 -0 +-4.2 0 0.2 0.08 0.48 0 1 -0 +-3.8 -0 -0.2 0.12 0.52 0 1 -0 +-4.2 -0 -0.2 0.08 0.52 0 1 -0 +-3.8 0 0.2 0.12 0.48 0 1 -0 +-3.8 -0 -0.2 0.12 0.52 0 1 -0 +-4.2 0 0.2 0.08 0.48 0 1 -0 +-3.8 0 0.2 0.12 0.48 0 1 -0 +-3.4 -0 -0.2 0.16 0.52 0 1 -0 +-3.8 -0 -0.2 0.12 0.52 0 1 -0 +-3.4 0 0.2 0.16 0.48 0 1 -0 +-3.4 -0 -0.2 0.16 0.52 0 1 -0 +-3.8 0 0.2 0.12 0.48 0 1 -0 +-3.4 0 0.2 0.16 0.48 0 1 -0 +-3 -0 -0.2 0.2 0.52 0 1 -0 +-3.4 -0 -0.2 0.16 0.52 0 1 -0 +-3 0 0.2 0.2 0.48 0 1 -0 +-3 -0 -0.2 0.2 0.52 0 1 -0 +-3.4 0 0.2 0.16 0.48 0 1 -0 +-3 0 0.2 0.2 0.48 0 1 -0 +-2.6 -0 -0.2 0.24 0.52 0 1 -0 +-3 -0 -0.2 0.2 0.52 0 1 -0 +-2.6 0 0.2 0.24 0.48 0 1 -0 +-2.6 -0 -0.2 0.24 0.52 0 1 -0 +-3 0 0.2 0.2 0.48 0 1 -0 +-2.6 0 0.2 0.24 0.48 0 1 -0 +-2.2 -0 -0.2 0.28 0.52 0 1 -0 +-2.6 -0 -0.2 0.24 0.52 0 1 -0 +-2.2 0 0.2 0.28 0.48 0 1 -0 +-2.2 -0 -0.2 0.28 0.52 0 1 -0 +-2.6 0 0.2 0.24 0.48 0 1 -0 +-2.2 0 0.2 0.28 0.48 0 1 -0 +-1.8 -0 -0.2 0.32 0.52 0 1 -0 +-2.2 -0 -0.2 0.28 0.52 0 1 -0 +-1.8 0 0.2 0.32 0.48 0 1 -0 +-1.8 -0 -0.2 0.32 0.52 0 1 -0 +-2.2 0 0.2 0.28 0.48 0 1 -0 +-1.8 0 0.2 0.32 0.48 0 1 -0 +-1.4 -0 -0.2 0.36 0.52 0 1 -0 +-1.8 -0 -0.2 0.32 0.52 0 1 -0 +-1.4 0 0.2 0.36 0.48 0 1 -0 +-1.4 -0 -0.2 0.36 0.52 0 1 -0 +-1.8 0 0.2 0.32 0.48 0 1 -0 +-1.4 0 0.2 0.36 0.48 0 1 -0 +-1 -0 -0.2 0.4 0.52 0 1 -0 +-1.4 -0 -0.2 0.36 0.52 0 1 -0 +-1 0 0.2 0.4 0.48 0 1 -0 +-1 -0 -0.2 0.4 0.52 0 1 -0 +-1.4 0 0.2 0.36 0.48 0 1 -0 +-1 0 0.2 0.4 0.48 0 1 -0 +-0.6 -0 -0.2 0.44 0.52 0 1 -0 +-1 -0 -0.2 0.4 0.52 0 1 -0 +-0.6 0 0.2 0.44 0.48 0 1 -0 +-0.6 -0 -0.2 0.44 0.52 0 1 -0 +-1 0 0.2 0.4 0.48 0 1 -0 +-0.6 0 0.2 0.44 0.48 0 1 -0 +-0.2 -0 -0.2 0.48 0.52 0 1 -0 +-0.6 -0 -0.2 0.44 0.52 0 1 -0 +-0.2 0 0.2 0.48 0.48 0 1 -0 +-0.2 -0 -0.2 0.48 0.52 0 1 -0 +-0.6 0 0.2 0.44 0.48 0 1 -0 +-0.2 0 0.2 0.48 0.48 0 1 -0 +0.2 -0 -0.2 0.52 0.52 0 1 -0 +-0.2 -0 -0.2 0.48 0.52 0 1 -0 +0.2 0 0.2 0.52 0.48 0 1 -0 +0.2 -0 -0.2 0.52 0.52 0 1 -0 +-0.2 0 0.2 0.48 0.48 0 1 -0 +0.2 0 0.2 0.52 0.48 0 1 -0 +0.6 -0 -0.2 0.56 0.52 0 1 -0 +0.2 -0 -0.2 0.52 0.52 0 1 -0 +0.6 0 0.2 0.56 0.48 0 1 -0 +0.6 -0 -0.2 0.56 0.52 0 1 -0 +0.2 0 0.2 0.52 0.48 0 1 -0 +0.6 0 0.2 0.56 0.48 0 1 -0 +1 -0 -0.2 0.6 0.52 0 1 -0 +0.6 -0 -0.2 0.56 0.52 0 1 -0 +1 0 0.2 0.6 0.48 0 1 -0 +1 -0 -0.2 0.6 0.52 0 1 -0 +0.6 0 0.2 0.56 0.48 0 1 -0 +1 0 0.2 0.6 0.48 0 1 -0 +1.4 -0 -0.2 0.64 0.52 0 1 -0 +1 -0 -0.2 0.6 0.52 0 1 -0 +1.4 0 0.2 0.64 0.48 0 1 -0 +1.4 -0 -0.2 0.64 0.52 0 1 -0 +1 0 0.2 0.6 0.48 0 1 -0 +1.4 0 0.2 0.64 0.48 0 1 -0 +1.8 -0 -0.2 0.68 0.52 0 1 -0 +1.4 -0 -0.2 0.64 0.52 0 1 -0 +1.8 0 0.2 0.68 0.48 0 1 -0 +1.8 -0 -0.2 0.68 0.52 0 1 -0 +1.4 0 0.2 0.64 0.48 0 1 -0 +1.8 0 0.2 0.68 0.48 0 1 -0 +2.2 -0 -0.2 0.72 0.52 0 1 -0 +1.8 -0 -0.2 0.68 0.52 0 1 -0 +2.2 0 0.2 0.72 0.48 0 1 -0 +2.2 -0 -0.2 0.72 0.52 0 1 -0 +1.8 0 0.2 0.68 0.48 0 1 -0 +2.2 0 0.2 0.72 0.48 0 1 -0 +2.6 -0 -0.2 0.76 0.52 0 1 -0 +2.2 -0 -0.2 0.72 0.52 0 1 -0 +2.6 0 0.2 0.76 0.48 0 1 -0 +2.6 -0 -0.2 0.76 0.52 0 1 -0 +2.2 0 0.2 0.72 0.48 0 1 -0 +2.6 0 0.2 0.76 0.48 0 1 -0 +3 -0 -0.2 0.8 0.52 0 1 -0 +2.6 -0 -0.2 0.76 0.52 0 1 -0 +3 0 0.2 0.8 0.48 0 1 -0 +3 -0 -0.2 0.8 0.52 0 1 -0 +2.6 0 0.2 0.76 0.48 0 1 -0 +3 0 0.2 0.8 0.48 0 1 -0 +3.4 -0 -0.2 0.84 0.52 0 1 -0 +3 -0 -0.2 0.8 0.52 0 1 -0 +3.4 0 0.2 0.84 0.48 0 1 -0 +3.4 -0 -0.2 0.84 0.52 0 1 -0 +3 0 0.2 0.8 0.48 0 1 -0 +3.4 0 0.2 0.84 0.48 0 1 -0 +3.8 -0 -0.2 0.88 0.52 0 1 -0 +3.4 -0 -0.2 0.84 0.52 0 1 -0 +3.8 0 0.2 0.88 0.48 0 1 -0 +3.8 -0 -0.2 0.88 0.52 0 1 -0 +3.4 0 0.2 0.84 0.48 0 1 -0 +3.8 0 0.2 0.88 0.48 0 1 -0 +4.2 -0 -0.2 0.92 0.52 0 1 -0 +3.8 -0 -0.2 0.88 0.52 0 1 -0 +4.2 0 0.2 0.92 0.48 0 1 -0 +4.2 -0 -0.2 0.92 0.52 0 1 -0 +3.8 0 0.2 0.88 0.48 0 1 -0 +4.2 0 0.2 0.92 0.48 0 1 -0 +4.6 -0 -0.2 0.96 0.52 0 1 -0 +4.2 -0 -0.2 0.92 0.52 0 1 -0 +4.6 0 0.2 0.96 0.48 0 1 -0 +4.6 -0 -0.2 0.96 0.52 0 1 -0 +4.2 0 0.2 0.92 0.48 0 1 -0 +4.6 0 0.2 0.96 0.48 0 1 -0 +5 -0 -0.2 1 0.52 0 1 -0 +4.6 -0 -0.2 0.96 0.52 0 1 -0 +5 0 0.2 1 0.48 0 1 -0 +5 -0 -0.2 1 0.52 0 1 -0 +4.6 0 0.2 0.96 0.48 0 1 -0 +-5 0 0.6 0 0.44 0 1 -0 +-4.6 0 0.2 0.04 0.48 0 1 -0 +-5 0 0.2 0 0.48 0 1 -0 +-4.6 0 0.6 0.04 0.44 0 1 -0 +-4.6 0 0.2 0.04 0.48 0 1 -0 +-5 0 0.6 0 0.44 0 1 -0 +-4.6 0 0.6 0.04 0.44 0 1 -0 +-4.2 0 0.2 0.08 0.48 0 1 -0 +-4.6 0 0.2 0.04 0.48 0 1 -0 +-4.2 0 0.6 0.08 0.44 0 1 -0 +-4.2 0 0.2 0.08 0.48 0 1 -0 +-4.6 0 0.6 0.04 0.44 0 1 -0 +-4.2 0 0.6 0.08 0.44 0 1 -0 +-3.8 0 0.2 0.12 0.48 0 1 -0 +-4.2 0 0.2 0.08 0.48 0 1 -0 +-3.8 0 0.6 0.12 0.44 0 1 -0 +-3.8 0 0.2 0.12 0.48 0 1 -0 +-4.2 0 0.6 0.08 0.44 0 1 -0 +-3.8 0 0.6 0.12 0.44 0 1 -0 +-3.4 0 0.2 0.16 0.48 0 1 -0 +-3.8 0 0.2 0.12 0.48 0 1 -0 +-3.4 0 0.6 0.16 0.44 0 1 -0 +-3.4 0 0.2 0.16 0.48 0 1 -0 +-3.8 0 0.6 0.12 0.44 0 1 -0 +-3.4 0 0.6 0.16 0.44 0 1 -0 +-3 0 0.2 0.2 0.48 0 1 -0 +-3.4 0 0.2 0.16 0.48 0 1 -0 +-3 0 0.6 0.2 0.44 0 1 -0 +-3 0 0.2 0.2 0.48 0 1 -0 +-3.4 0 0.6 0.16 0.44 0 1 -0 +-3 0 0.6 0.2 0.44 0 1 -0 +-2.6 0 0.2 0.24 0.48 0 1 -0 +-3 0 0.2 0.2 0.48 0 1 -0 +-2.6 0 0.6 0.24 0.44 0 1 -0 +-2.6 0 0.2 0.24 0.48 0 1 -0 +-3 0 0.6 0.2 0.44 0 1 -0 +-2.6 0 0.6 0.24 0.44 0 1 -0 +-2.2 0 0.2 0.28 0.48 0 1 -0 +-2.6 0 0.2 0.24 0.48 0 1 -0 +-2.2 0 0.6 0.28 0.44 0 1 -0 +-2.2 0 0.2 0.28 0.48 0 1 -0 +-2.6 0 0.6 0.24 0.44 0 1 -0 +-2.2 0 0.6 0.28 0.44 0 1 -0 +-1.8 0 0.2 0.32 0.48 0 1 -0 +-2.2 0 0.2 0.28 0.48 0 1 -0 +-1.8 0 0.6 0.32 0.44 0 1 -0 +-1.8 0 0.2 0.32 0.48 0 1 -0 +-2.2 0 0.6 0.28 0.44 0 1 -0 +-1.8 0 0.6 0.32 0.44 0 1 -0 +-1.4 0 0.2 0.36 0.48 0 1 -0 +-1.8 0 0.2 0.32 0.48 0 1 -0 +-1.4 0 0.6 0.36 0.44 0 1 -0 +-1.4 0 0.2 0.36 0.48 0 1 -0 +-1.8 0 0.6 0.32 0.44 0 1 -0 +-1.4 0 0.6 0.36 0.44 0 1 -0 +-1 0 0.2 0.4 0.48 0 1 -0 +-1.4 0 0.2 0.36 0.48 0 1 -0 +-1 0 0.6 0.4 0.44 0 1 -0 +-1 0 0.2 0.4 0.48 0 1 -0 +-1.4 0 0.6 0.36 0.44 0 1 -0 +-1 0 0.6 0.4 0.44 0 1 -0 +-0.6 0 0.2 0.44 0.48 0 1 -0 +-1 0 0.2 0.4 0.48 0 1 -0 +-0.6 0 0.6 0.44 0.44 0 1 -0 +-0.6 0 0.2 0.44 0.48 0 1 -0 +-1 0 0.6 0.4 0.44 0 1 -0 +-0.6 0 0.6 0.44 0.44 0 1 -0 +-0.2 0 0.2 0.48 0.48 0 1 -0 +-0.6 0 0.2 0.44 0.48 0 1 -0 +-0.2 0 0.6 0.48 0.44 0 1 -0 +-0.2 0 0.2 0.48 0.48 0 1 -0 +-0.6 0 0.6 0.44 0.44 0 1 -0 +-0.2 0 0.6 0.48 0.44 0 1 -0 +0.2 0 0.2 0.52 0.48 0 1 -0 +-0.2 0 0.2 0.48 0.48 0 1 -0 +0.2 0 0.6 0.52 0.44 0 1 -0 +0.2 0 0.2 0.52 0.48 0 1 -0 +-0.2 0 0.6 0.48 0.44 0 1 -0 +0.2 0 0.6 0.52 0.44 0 1 -0 +0.6 0 0.2 0.56 0.48 0 1 -0 +0.2 0 0.2 0.52 0.48 0 1 -0 +0.6 0 0.6 0.56 0.44 0 1 -0 +0.6 0 0.2 0.56 0.48 0 1 -0 +0.2 0 0.6 0.52 0.44 0 1 -0 +0.6 0 0.6 0.56 0.44 0 1 -0 +1 0 0.2 0.6 0.48 0 1 -0 +0.6 0 0.2 0.56 0.48 0 1 -0 +1 0 0.6 0.6 0.44 0 1 -0 +1 0 0.2 0.6 0.48 0 1 -0 +0.6 0 0.6 0.56 0.44 0 1 -0 +1 0 0.6 0.6 0.44 0 1 -0 +1.4 0 0.2 0.64 0.48 0 1 -0 +1 0 0.2 0.6 0.48 0 1 -0 +1.4 0 0.6 0.64 0.44 0 1 -0 +1.4 0 0.2 0.64 0.48 0 1 -0 +1 0 0.6 0.6 0.44 0 1 -0 +1.4 0 0.6 0.64 0.44 0 1 -0 +1.8 0 0.2 0.68 0.48 0 1 -0 +1.4 0 0.2 0.64 0.48 0 1 -0 +1.8 0 0.6 0.68 0.44 0 1 -0 +1.8 0 0.2 0.68 0.48 0 1 -0 +1.4 0 0.6 0.64 0.44 0 1 -0 +1.8 0 0.6 0.68 0.44 0 1 -0 +2.2 0 0.2 0.72 0.48 0 1 -0 +1.8 0 0.2 0.68 0.48 0 1 -0 +2.2 0 0.6 0.72 0.44 0 1 -0 +2.2 0 0.2 0.72 0.48 0 1 -0 +1.8 0 0.6 0.68 0.44 0 1 -0 +2.2 0 0.6 0.72 0.44 0 1 -0 +2.6 0 0.2 0.76 0.48 0 1 -0 +2.2 0 0.2 0.72 0.48 0 1 -0 +2.6 0 0.6 0.76 0.44 0 1 -0 +2.6 0 0.2 0.76 0.48 0 1 -0 +2.2 0 0.6 0.72 0.44 0 1 -0 +2.6 0 0.6 0.76 0.44 0 1 -0 +3 0 0.2 0.8 0.48 0 1 -0 +2.6 0 0.2 0.76 0.48 0 1 -0 +3 0 0.6 0.8 0.44 0 1 -0 +3 0 0.2 0.8 0.48 0 1 -0 +2.6 0 0.6 0.76 0.44 0 1 -0 +3 0 0.6 0.8 0.44 0 1 -0 +3.4 0 0.2 0.84 0.48 0 1 -0 +3 0 0.2 0.8 0.48 0 1 -0 +3.4 0 0.6 0.84 0.44 0 1 -0 +3.4 0 0.2 0.84 0.48 0 1 -0 +3 0 0.6 0.8 0.44 0 1 -0 +3.4 0 0.6 0.84 0.44 0 1 -0 +3.8 0 0.2 0.88 0.48 0 1 -0 +3.4 0 0.2 0.84 0.48 0 1 -0 +3.8 0 0.6 0.88 0.44 0 1 -0 +3.8 0 0.2 0.88 0.48 0 1 -0 +3.4 0 0.6 0.84 0.44 0 1 -0 +3.8 0 0.6 0.88 0.44 0 1 -0 +4.2 0 0.2 0.92 0.48 0 1 -0 +3.8 0 0.2 0.88 0.48 0 1 -0 +4.2 0 0.6 0.92 0.44 0 1 -0 +4.2 0 0.2 0.92 0.48 0 1 -0 +3.8 0 0.6 0.88 0.44 0 1 -0 +4.2 0 0.6 0.92 0.44 0 1 -0 +4.6 0 0.2 0.96 0.48 0 1 -0 +4.2 0 0.2 0.92 0.48 0 1 -0 +4.6 0 0.6 0.96 0.44 0 1 -0 +4.6 0 0.2 0.96 0.48 0 1 -0 +4.2 0 0.6 0.92 0.44 0 1 -0 +4.6 0 0.6 0.96 0.44 0 1 -0 +5 0 0.2 1 0.48 0 1 -0 +4.6 0 0.2 0.96 0.48 0 1 -0 +5 0 0.6 1 0.44 0 1 -0 +5 0 0.2 1 0.48 0 1 -0 +4.6 0 0.6 0.96 0.44 0 1 -0 +-5 0 1 0 0.4 0 1 -0 +-4.6 0 0.6 0.04 0.44 0 1 -0 +-5 0 0.6 0 0.44 0 1 -0 +-4.6 0 1 0.04 0.4 0 1 -0 +-4.6 0 0.6 0.04 0.44 0 1 -0 +-5 0 1 0 0.4 0 1 -0 +-4.6 0 1 0.04 0.4 0 1 -0 +-4.2 0 0.6 0.08 0.44 0 1 -0 +-4.6 0 0.6 0.04 0.44 0 1 -0 +-4.2 0 1 0.08 0.4 0 1 -0 +-4.2 0 0.6 0.08 0.44 0 1 -0 +-4.6 0 1 0.04 0.4 0 1 -0 +-4.2 0 1 0.08 0.4 0 1 -0 +-3.8 0 0.6 0.12 0.44 0 1 -0 +-4.2 0 0.6 0.08 0.44 0 1 -0 +-3.8 0 1 0.12 0.4 0 1 -0 +-3.8 0 0.6 0.12 0.44 0 1 -0 +-4.2 0 1 0.08 0.4 0 1 -0 +-3.8 0 1 0.12 0.4 0 1 -0 +-3.4 0 0.6 0.16 0.44 0 1 -0 +-3.8 0 0.6 0.12 0.44 0 1 -0 +-3.4 0 1 0.16 0.4 0 1 -0 +-3.4 0 0.6 0.16 0.44 0 1 -0 +-3.8 0 1 0.12 0.4 0 1 -0 +-3.4 0 1 0.16 0.4 0 1 -0 +-3 0 0.6 0.2 0.44 0 1 -0 +-3.4 0 0.6 0.16 0.44 0 1 -0 +-3 0 1 0.2 0.4 0 1 -0 +-3 0 0.6 0.2 0.44 0 1 -0 +-3.4 0 1 0.16 0.4 0 1 -0 +-3 0 1 0.2 0.4 0 1 -0 +-2.6 0 0.6 0.24 0.44 0 1 -0 +-3 0 0.6 0.2 0.44 0 1 -0 +-2.6 0 1 0.24 0.4 0 1 -0 +-2.6 0 0.6 0.24 0.44 0 1 -0 +-3 0 1 0.2 0.4 0 1 -0 +-2.6 0 1 0.24 0.4 0 1 -0 +-2.2 0 0.6 0.28 0.44 0 1 -0 +-2.6 0 0.6 0.24 0.44 0 1 -0 +-2.2 0 1 0.28 0.4 0 1 -0 +-2.2 0 0.6 0.28 0.44 0 1 -0 +-2.6 0 1 0.24 0.4 0 1 -0 +-2.2 0 1 0.28 0.4 0 1 -0 +-1.8 0 0.6 0.32 0.44 0 1 -0 +-2.2 0 0.6 0.28 0.44 0 1 -0 +-1.8 0 1 0.32 0.4 0 1 -0 +-1.8 0 0.6 0.32 0.44 0 1 -0 +-2.2 0 1 0.28 0.4 0 1 -0 +-1.8 0 1 0.32 0.4 0 1 -0 +-1.4 0 0.6 0.36 0.44 0 1 -0 +-1.8 0 0.6 0.32 0.44 0 1 -0 +-1.4 0 1 0.36 0.4 0 1 -0 +-1.4 0 0.6 0.36 0.44 0 1 -0 +-1.8 0 1 0.32 0.4 0 1 -0 +-1.4 0 1 0.36 0.4 0 1 -0 +-1 0 0.6 0.4 0.44 0 1 -0 +-1.4 0 0.6 0.36 0.44 0 1 -0 +-1 0 1 0.4 0.4 0 1 -0 +-1 0 0.6 0.4 0.44 0 1 -0 +-1.4 0 1 0.36 0.4 0 1 -0 +-1 0 1 0.4 0.4 0 1 -0 +-0.6 0 0.6 0.44 0.44 0 1 -0 +-1 0 0.6 0.4 0.44 0 1 -0 +-0.6 0 1 0.44 0.4 0 1 -0 +-0.6 0 0.6 0.44 0.44 0 1 -0 +-1 0 1 0.4 0.4 0 1 -0 +-0.6 0 1 0.44 0.4 0 1 -0 +-0.2 0 0.6 0.48 0.44 0 1 -0 +-0.6 0 0.6 0.44 0.44 0 1 -0 +-0.2 0 1 0.48 0.4 0 1 -0 +-0.2 0 0.6 0.48 0.44 0 1 -0 +-0.6 0 1 0.44 0.4 0 1 -0 +-0.2 0 1 0.48 0.4 0 1 -0 +0.2 0 0.6 0.52 0.44 0 1 -0 +-0.2 0 0.6 0.48 0.44 0 1 -0 +0.2 0 1 0.52 0.4 0 1 -0 +0.2 0 0.6 0.52 0.44 0 1 -0 +-0.2 0 1 0.48 0.4 0 1 -0 +0.2 0 1 0.52 0.4 0 1 -0 +0.6 0 0.6 0.56 0.44 0 1 -0 +0.2 0 0.6 0.52 0.44 0 1 -0 +0.6 0 1 0.56 0.4 0 1 -0 +0.6 0 0.6 0.56 0.44 0 1 -0 +0.2 0 1 0.52 0.4 0 1 -0 +0.6 0 1 0.56 0.4 0 1 -0 +1 0 0.6 0.6 0.44 0 1 -0 +0.6 0 0.6 0.56 0.44 0 1 -0 +1 0 1 0.6 0.4 0 1 -0 +1 0 0.6 0.6 0.44 0 1 -0 +0.6 0 1 0.56 0.4 0 1 -0 +1 0 1 0.6 0.4 0 1 -0 +1.4 0 0.6 0.64 0.44 0 1 -0 +1 0 0.6 0.6 0.44 0 1 -0 +1.4 0 1 0.64 0.4 0 1 -0 +1.4 0 0.6 0.64 0.44 0 1 -0 +1 0 1 0.6 0.4 0 1 -0 +1.4 0 1 0.64 0.4 0 1 -0 +1.8 0 0.6 0.68 0.44 0 1 -0 +1.4 0 0.6 0.64 0.44 0 1 -0 +1.8 0 1 0.68 0.4 0 1 -0 +1.8 0 0.6 0.68 0.44 0 1 -0 +1.4 0 1 0.64 0.4 0 1 -0 +1.8 0 1 0.68 0.4 0 1 -0 +2.2 0 0.6 0.72 0.44 0 1 -0 +1.8 0 0.6 0.68 0.44 0 1 -0 +2.2 0 1 0.72 0.4 0 1 -0 +2.2 0 0.6 0.72 0.44 0 1 -0 +1.8 0 1 0.68 0.4 0 1 -0 +2.2 0 1 0.72 0.4 0 1 -0 +2.6 0 0.6 0.76 0.44 0 1 -0 +2.2 0 0.6 0.72 0.44 0 1 -0 +2.6 0 1 0.76 0.4 0 1 -0 +2.6 0 0.6 0.76 0.44 0 1 -0 +2.2 0 1 0.72 0.4 0 1 -0 +2.6 0 1 0.76 0.4 0 1 -0 +3 0 0.6 0.8 0.44 0 1 -0 +2.6 0 0.6 0.76 0.44 0 1 -0 +3 0 1 0.8 0.4 0 1 -0 +3 0 0.6 0.8 0.44 0 1 -0 +2.6 0 1 0.76 0.4 0 1 -0 +3 0 1 0.8 0.4 0 1 -0 +3.4 0 0.6 0.84 0.44 0 1 -0 +3 0 0.6 0.8 0.44 0 1 -0 +3.4 0 1 0.84 0.4 0 1 -0 +3.4 0 0.6 0.84 0.44 0 1 -0 +3 0 1 0.8 0.4 0 1 -0 +3.4 0 1 0.84 0.4 0 1 -0 +3.8 0 0.6 0.88 0.44 0 1 -0 +3.4 0 0.6 0.84 0.44 0 1 -0 +3.8 0 1 0.88 0.4 0 1 -0 +3.8 0 0.6 0.88 0.44 0 1 -0 +3.4 0 1 0.84 0.4 0 1 -0 +3.8 0 1 0.88 0.4 0 1 -0 +4.2 0 0.6 0.92 0.44 0 1 -0 +3.8 0 0.6 0.88 0.44 0 1 -0 +4.2 0 1 0.92 0.4 0 1 -0 +4.2 0 0.6 0.92 0.44 0 1 -0 +3.8 0 1 0.88 0.4 0 1 -0 +4.2 0 1 0.92 0.4 0 1 -0 +4.6 0 0.6 0.96 0.44 0 1 -0 +4.2 0 0.6 0.92 0.44 0 1 -0 +4.6 0 1 0.96 0.4 0 1 -0 +4.6 0 0.6 0.96 0.44 0 1 -0 +4.2 0 1 0.92 0.4 0 1 -0 +4.6 0 1 0.96 0.4 0 1 -0 +5 0 0.6 1 0.44 0 1 -0 +4.6 0 0.6 0.96 0.44 0 1 -0 +5 0 1 1 0.4 0 1 -0 +5 0 0.6 1 0.44 0 1 -0 +4.6 0 1 0.96 0.4 0 1 -0 +-5 0 1.4 0 0.36 0 1 -0 +-4.6 0 1 0.04 0.4 0 1 -0 +-5 0 1 0 0.4 0 1 -0 +-4.6 0 1.4 0.04 0.36 0 1 -0 +-4.6 0 1 0.04 0.4 0 1 -0 +-5 0 1.4 0 0.36 0 1 -0 +-4.6 0 1.4 0.04 0.36 0 1 -0 +-4.2 0 1 0.08 0.4 0 1 -0 +-4.6 0 1 0.04 0.4 0 1 -0 +-4.2 0 1.4 0.08 0.36 0 1 -0 +-4.2 0 1 0.08 0.4 0 1 -0 +-4.6 0 1.4 0.04 0.36 0 1 -0 +-4.2 0 1.4 0.08 0.36 0 1 -0 +-3.8 0 1 0.12 0.4 0 1 -0 +-4.2 0 1 0.08 0.4 0 1 -0 +-3.8 0 1.4 0.12 0.36 0 1 -0 +-3.8 0 1 0.12 0.4 0 1 -0 +-4.2 0 1.4 0.08 0.36 0 1 -0 +-3.8 0 1.4 0.12 0.36 0 1 -0 +-3.4 0 1 0.16 0.4 0 1 -0 +-3.8 0 1 0.12 0.4 0 1 -0 +-3.4 0 1.4 0.16 0.36 0 1 -0 +-3.4 0 1 0.16 0.4 0 1 -0 +-3.8 0 1.4 0.12 0.36 0 1 -0 +-3.4 0 1.4 0.16 0.36 0 1 -0 +-3 0 1 0.2 0.4 0 1 -0 +-3.4 0 1 0.16 0.4 0 1 -0 +-3 0 1.4 0.2 0.36 0 1 -0 +-3 0 1 0.2 0.4 0 1 -0 +-3.4 0 1.4 0.16 0.36 0 1 -0 +-3 0 1.4 0.2 0.36 0 1 -0 +-2.6 0 1 0.24 0.4 0 1 -0 +-3 0 1 0.2 0.4 0 1 -0 +-2.6 0 1.4 0.24 0.36 0 1 -0 +-2.6 0 1 0.24 0.4 0 1 -0 +-3 0 1.4 0.2 0.36 0 1 -0 +-2.6 0 1.4 0.24 0.36 0 1 -0 +-2.2 0 1 0.28 0.4 0 1 -0 +-2.6 0 1 0.24 0.4 0 1 -0 +-2.2 0 1.4 0.28 0.36 0 1 -0 +-2.2 0 1 0.28 0.4 0 1 -0 +-2.6 0 1.4 0.24 0.36 0 1 -0 +-2.2 0 1.4 0.28 0.36 0 1 -0 +-1.8 0 1 0.32 0.4 0 1 -0 +-2.2 0 1 0.28 0.4 0 1 -0 +-1.8 0 1.4 0.32 0.36 0 1 -0 +-1.8 0 1 0.32 0.4 0 1 -0 +-2.2 0 1.4 0.28 0.36 0 1 -0 +-1.8 0 1.4 0.32 0.36 0 1 -0 +-1.4 0 1 0.36 0.4 0 1 -0 +-1.8 0 1 0.32 0.4 0 1 -0 +-1.4 0 1.4 0.36 0.36 0 1 -0 +-1.4 0 1 0.36 0.4 0 1 -0 +-1.8 0 1.4 0.32 0.36 0 1 -0 +-1.4 0 1.4 0.36 0.36 0 1 -0 +-1 0 1 0.4 0.4 0 1 -0 +-1.4 0 1 0.36 0.4 0 1 -0 +-1 0 1.4 0.4 0.36 0 1 -0 +-1 0 1 0.4 0.4 0 1 -0 +-1.4 0 1.4 0.36 0.36 0 1 -0 +-1 0 1.4 0.4 0.36 0 1 -0 +-0.6 0 1 0.44 0.4 0 1 -0 +-1 0 1 0.4 0.4 0 1 -0 +-0.6 0 1.4 0.44 0.36 0 1 -0 +-0.6 0 1 0.44 0.4 0 1 -0 +-1 0 1.4 0.4 0.36 0 1 -0 +-0.6 0 1.4 0.44 0.36 0 1 -0 +-0.2 0 1 0.48 0.4 0 1 -0 +-0.6 0 1 0.44 0.4 0 1 -0 +-0.2 0 1.4 0.48 0.36 0 1 -0 +-0.2 0 1 0.48 0.4 0 1 -0 +-0.6 0 1.4 0.44 0.36 0 1 -0 +-0.2 0 1.4 0.48 0.36 0 1 -0 +0.2 0 1 0.52 0.4 0 1 -0 +-0.2 0 1 0.48 0.4 0 1 -0 +0.2 0 1.4 0.52 0.36 0 1 -0 +0.2 0 1 0.52 0.4 0 1 -0 +-0.2 0 1.4 0.48 0.36 0 1 -0 +0.2 0 1.4 0.52 0.36 0 1 -0 +0.6 0 1 0.56 0.4 0 1 -0 +0.2 0 1 0.52 0.4 0 1 -0 +0.6 0 1.4 0.56 0.36 0 1 -0 +0.6 0 1 0.56 0.4 0 1 -0 +0.2 0 1.4 0.52 0.36 0 1 -0 +0.6 0 1.4 0.56 0.36 0 1 -0 +1 0 1 0.6 0.4 0 1 -0 +0.6 0 1 0.56 0.4 0 1 -0 +1 0 1.4 0.6 0.36 0 1 -0 +1 0 1 0.6 0.4 0 1 -0 +0.6 0 1.4 0.56 0.36 0 1 -0 +1 0 1.4 0.6 0.36 0 1 -0 +1.4 0 1 0.64 0.4 0 1 -0 +1 0 1 0.6 0.4 0 1 -0 +1.4 0 1.4 0.64 0.36 0 1 -0 +1.4 0 1 0.64 0.4 0 1 -0 +1 0 1.4 0.6 0.36 0 1 -0 +1.4 0 1.4 0.64 0.36 0 1 -0 +1.8 0 1 0.68 0.4 0 1 -0 +1.4 0 1 0.64 0.4 0 1 -0 +1.8 0 1.4 0.68 0.36 0 1 -0 +1.8 0 1 0.68 0.4 0 1 -0 +1.4 0 1.4 0.64 0.36 0 1 -0 +1.8 0 1.4 0.68 0.36 0 1 -0 +2.2 0 1 0.72 0.4 0 1 -0 +1.8 0 1 0.68 0.4 0 1 -0 +2.2 0 1.4 0.72 0.36 0 1 -0 +2.2 0 1 0.72 0.4 0 1 -0 +1.8 0 1.4 0.68 0.36 0 1 -0 +2.2 0 1.4 0.72 0.36 0 1 -0 +2.6 0 1 0.76 0.4 0 1 -0 +2.2 0 1 0.72 0.4 0 1 -0 +2.6 0 1.4 0.76 0.36 0 1 -0 +2.6 0 1 0.76 0.4 0 1 -0 +2.2 0 1.4 0.72 0.36 0 1 -0 +2.6 0 1.4 0.76 0.36 0 1 -0 +3 0 1 0.8 0.4 0 1 -0 +2.6 0 1 0.76 0.4 0 1 -0 +3 0 1.4 0.8 0.36 0 1 -0 +3 0 1 0.8 0.4 0 1 -0 +2.6 0 1.4 0.76 0.36 0 1 -0 +3 0 1.4 0.8 0.36 0 1 -0 +3.4 0 1 0.84 0.4 0 1 -0 +3 0 1 0.8 0.4 0 1 -0 +3.4 0 1.4 0.84 0.36 0 1 -0 +3.4 0 1 0.84 0.4 0 1 -0 +3 0 1.4 0.8 0.36 0 1 -0 +3.4 0 1.4 0.84 0.36 0 1 -0 +3.8 0 1 0.88 0.4 0 1 -0 +3.4 0 1 0.84 0.4 0 1 -0 +3.8 0 1.4 0.88 0.36 0 1 -0 +3.8 0 1 0.88 0.4 0 1 -0 +3.4 0 1.4 0.84 0.36 0 1 -0 +3.8 0 1.4 0.88 0.36 0 1 -0 +4.2 0 1 0.92 0.4 0 1 -0 +3.8 0 1 0.88 0.4 0 1 -0 +4.2 0 1.4 0.92 0.36 0 1 -0 +4.2 0 1 0.92 0.4 0 1 -0 +3.8 0 1.4 0.88 0.36 0 1 -0 +4.2 0 1.4 0.92 0.36 0 1 -0 +4.6 0 1 0.96 0.4 0 1 -0 +4.2 0 1 0.92 0.4 0 1 -0 +4.6 0 1.4 0.96 0.36 0 1 -0 +4.6 0 1 0.96 0.4 0 1 -0 +4.2 0 1.4 0.92 0.36 0 1 -0 +4.6 0 1.4 0.96 0.36 0 1 -0 +5 0 1 1 0.4 0 1 -0 +4.6 0 1 0.96 0.4 0 1 -0 +5 0 1.4 1 0.36 0 1 -0 +5 0 1 1 0.4 0 1 -0 +4.6 0 1.4 0.96 0.36 0 1 -0 +-5 0 1.8 0 0.32 0 1 -0 +-4.6 0 1.4 0.04 0.36 0 1 -0 +-5 0 1.4 0 0.36 0 1 -0 +-4.6 0 1.8 0.04 0.32 0 1 -0 +-4.6 0 1.4 0.04 0.36 0 1 -0 +-5 0 1.8 0 0.32 0 1 -0 +-4.6 0 1.8 0.04 0.32 0 1 -0 +-4.2 0 1.4 0.08 0.36 0 1 -0 +-4.6 0 1.4 0.04 0.36 0 1 -0 +-4.2 0 1.8 0.08 0.32 0 1 -0 +-4.2 0 1.4 0.08 0.36 0 1 -0 +-4.6 0 1.8 0.04 0.32 0 1 -0 +-4.2 0 1.8 0.08 0.32 0 1 -0 +-3.8 0 1.4 0.12 0.36 0 1 -0 +-4.2 0 1.4 0.08 0.36 0 1 -0 +-3.8 0 1.8 0.12 0.32 0 1 -0 +-3.8 0 1.4 0.12 0.36 0 1 -0 +-4.2 0 1.8 0.08 0.32 0 1 -0 +-3.8 0 1.8 0.12 0.32 0 1 -0 +-3.4 0 1.4 0.16 0.36 0 1 -0 +-3.8 0 1.4 0.12 0.36 0 1 -0 +-3.4 0 1.8 0.16 0.32 0 1 -0 +-3.4 0 1.4 0.16 0.36 0 1 -0 +-3.8 0 1.8 0.12 0.32 0 1 -0 +-3.4 0 1.8 0.16 0.32 0 1 -0 +-3 0 1.4 0.2 0.36 0 1 -0 +-3.4 0 1.4 0.16 0.36 0 1 -0 +-3 0 1.8 0.2 0.32 0 1 -0 +-3 0 1.4 0.2 0.36 0 1 -0 +-3.4 0 1.8 0.16 0.32 0 1 -0 +-3 0 1.8 0.2 0.32 0 1 -0 +-2.6 0 1.4 0.24 0.36 0 1 -0 +-3 0 1.4 0.2 0.36 0 1 -0 +-2.6 0 1.8 0.24 0.32 0 1 -0 +-2.6 0 1.4 0.24 0.36 0 1 -0 +-3 0 1.8 0.2 0.32 0 1 -0 +-2.6 0 1.8 0.24 0.32 0 1 -0 +-2.2 0 1.4 0.28 0.36 0 1 -0 +-2.6 0 1.4 0.24 0.36 0 1 -0 +-2.2 0 1.8 0.28 0.32 0 1 -0 +-2.2 0 1.4 0.28 0.36 0 1 -0 +-2.6 0 1.8 0.24 0.32 0 1 -0 +-2.2 0 1.8 0.28 0.32 0 1 -0 +-1.8 0 1.4 0.32 0.36 0 1 -0 +-2.2 0 1.4 0.28 0.36 0 1 -0 +-1.8 0 1.8 0.32 0.32 0 1 -0 +-1.8 0 1.4 0.32 0.36 0 1 -0 +-2.2 0 1.8 0.28 0.32 0 1 -0 +-1.8 0 1.8 0.32 0.32 0 1 -0 +-1.4 0 1.4 0.36 0.36 0 1 -0 +-1.8 0 1.4 0.32 0.36 0 1 -0 +-1.4 0 1.8 0.36 0.32 0 1 -0 +-1.4 0 1.4 0.36 0.36 0 1 -0 +-1.8 0 1.8 0.32 0.32 0 1 -0 +-1.4 0 1.8 0.36 0.32 0 1 -0 +-1 0 1.4 0.4 0.36 0 1 -0 +-1.4 0 1.4 0.36 0.36 0 1 -0 +-1 0 1.8 0.4 0.32 0 1 -0 +-1 0 1.4 0.4 0.36 0 1 -0 +-1.4 0 1.8 0.36 0.32 0 1 -0 +-1 0 1.8 0.4 0.32 0 1 -0 +-0.6 0 1.4 0.44 0.36 0 1 -0 +-1 0 1.4 0.4 0.36 0 1 -0 +-0.6 0 1.8 0.44 0.32 0 1 -0 +-0.6 0 1.4 0.44 0.36 0 1 -0 +-1 0 1.8 0.4 0.32 0 1 -0 +-0.6 0 1.8 0.44 0.32 0 1 -0 +-0.2 0 1.4 0.48 0.36 0 1 -0 +-0.6 0 1.4 0.44 0.36 0 1 -0 +-0.2 0 1.8 0.48 0.32 0 1 -0 +-0.2 0 1.4 0.48 0.36 0 1 -0 +-0.6 0 1.8 0.44 0.32 0 1 -0 +-0.2 0 1.8 0.48 0.32 0 1 -0 +0.2 0 1.4 0.52 0.36 0 1 -0 +-0.2 0 1.4 0.48 0.36 0 1 -0 +0.2 0 1.8 0.52 0.32 0 1 -0 +0.2 0 1.4 0.52 0.36 0 1 -0 +-0.2 0 1.8 0.48 0.32 0 1 -0 +0.2 0 1.8 0.52 0.32 0 1 -0 +0.6 0 1.4 0.56 0.36 0 1 -0 +0.2 0 1.4 0.52 0.36 0 1 -0 +0.6 0 1.8 0.56 0.32 0 1 -0 +0.6 0 1.4 0.56 0.36 0 1 -0 +0.2 0 1.8 0.52 0.32 0 1 -0 +0.6 0 1.8 0.56 0.32 0 1 -0 +1 0 1.4 0.6 0.36 0 1 -0 +0.6 0 1.4 0.56 0.36 0 1 -0 +1 0 1.8 0.6 0.32 0 1 -0 +1 0 1.4 0.6 0.36 0 1 -0 +0.6 0 1.8 0.56 0.32 0 1 -0 +1 0 1.8 0.6 0.32 0 1 -0 +1.4 0 1.4 0.64 0.36 0 1 -0 +1 0 1.4 0.6 0.36 0 1 -0 +1.4 0 1.8 0.64 0.32 0 1 -0 +1.4 0 1.4 0.64 0.36 0 1 -0 +1 0 1.8 0.6 0.32 0 1 -0 +1.4 0 1.8 0.64 0.32 0 1 -0 +1.8 0 1.4 0.68 0.36 0 1 -0 +1.4 0 1.4 0.64 0.36 0 1 -0 +1.8 0 1.8 0.68 0.32 0 1 -0 +1.8 0 1.4 0.68 0.36 0 1 -0 +1.4 0 1.8 0.64 0.32 0 1 -0 +1.8 0 1.8 0.68 0.32 0 1 -0 +2.2 0 1.4 0.72 0.36 0 1 -0 +1.8 0 1.4 0.68 0.36 0 1 -0 +2.2 0 1.8 0.72 0.32 0 1 -0 +2.2 0 1.4 0.72 0.36 0 1 -0 +1.8 0 1.8 0.68 0.32 0 1 -0 +2.2 0 1.8 0.72 0.32 0 1 -0 +2.6 0 1.4 0.76 0.36 0 1 -0 +2.2 0 1.4 0.72 0.36 0 1 -0 +2.6 0 1.8 0.76 0.32 0 1 -0 +2.6 0 1.4 0.76 0.36 0 1 -0 +2.2 0 1.8 0.72 0.32 0 1 -0 +2.6 0 1.8 0.76 0.32 0 1 -0 +3 0 1.4 0.8 0.36 0 1 -0 +2.6 0 1.4 0.76 0.36 0 1 -0 +3 0 1.8 0.8 0.32 0 1 -0 +3 0 1.4 0.8 0.36 0 1 -0 +2.6 0 1.8 0.76 0.32 0 1 -0 +3 0 1.8 0.8 0.32 0 1 -0 +3.4 0 1.4 0.84 0.36 0 1 -0 +3 0 1.4 0.8 0.36 0 1 -0 +3.4 0 1.8 0.84 0.32 0 1 -0 +3.4 0 1.4 0.84 0.36 0 1 -0 +3 0 1.8 0.8 0.32 0 1 -0 +3.4 0 1.8 0.84 0.32 0 1 -0 +3.8 0 1.4 0.88 0.36 0 1 -0 +3.4 0 1.4 0.84 0.36 0 1 -0 +3.8 0 1.8 0.88 0.32 0 1 -0 +3.8 0 1.4 0.88 0.36 0 1 -0 +3.4 0 1.8 0.84 0.32 0 1 -0 +3.8 0 1.8 0.88 0.32 0 1 -0 +4.2 0 1.4 0.92 0.36 0 1 -0 +3.8 0 1.4 0.88 0.36 0 1 -0 +4.2 0 1.8 0.92 0.32 0 1 -0 +4.2 0 1.4 0.92 0.36 0 1 -0 +3.8 0 1.8 0.88 0.32 0 1 -0 +4.2 0 1.8 0.92 0.32 0 1 -0 +4.6 0 1.4 0.96 0.36 0 1 -0 +4.2 0 1.4 0.92 0.36 0 1 -0 +4.6 0 1.8 0.96 0.32 0 1 -0 +4.6 0 1.4 0.96 0.36 0 1 -0 +4.2 0 1.8 0.92 0.32 0 1 -0 +4.6 0 1.8 0.96 0.32 0 1 -0 +5 0 1.4 1 0.36 0 1 -0 +4.6 0 1.4 0.96 0.36 0 1 -0 +5 0 1.8 1 0.32 0 1 -0 +5 0 1.4 1 0.36 0 1 -0 +4.6 0 1.8 0.96 0.32 0 1 -0 +-5 0 2.2 0 0.28 0 1 -0 +-4.6 0 1.8 0.04 0.32 0 1 -0 +-5 0 1.8 0 0.32 0 1 -0 +-4.6 0 2.2 0.04 0.28 0 1 -0 +-4.6 0 1.8 0.04 0.32 0 1 -0 +-5 0 2.2 0 0.28 0 1 -0 +-4.6 0 2.2 0.04 0.28 0 1 -0 +-4.2 0 1.8 0.08 0.32 0 1 -0 +-4.6 0 1.8 0.04 0.32 0 1 -0 +-4.2 0 2.2 0.08 0.28 0 1 -0 +-4.2 0 1.8 0.08 0.32 0 1 -0 +-4.6 0 2.2 0.04 0.28 0 1 -0 +-4.2 0 2.2 0.08 0.28 0 1 -0 +-3.8 0 1.8 0.12 0.32 0 1 -0 +-4.2 0 1.8 0.08 0.32 0 1 -0 +-3.8 0 2.2 0.12 0.28 0 1 -0 +-3.8 0 1.8 0.12 0.32 0 1 -0 +-4.2 0 2.2 0.08 0.28 0 1 -0 +-3.8 0 2.2 0.12 0.28 0 1 -0 +-3.4 0 1.8 0.16 0.32 0 1 -0 +-3.8 0 1.8 0.12 0.32 0 1 -0 +-3.4 0 2.2 0.16 0.28 0 1 -0 +-3.4 0 1.8 0.16 0.32 0 1 -0 +-3.8 0 2.2 0.12 0.28 0 1 -0 +-3.4 0 2.2 0.16 0.28 0 1 -0 +-3 0 1.8 0.2 0.32 0 1 -0 +-3.4 0 1.8 0.16 0.32 0 1 -0 +-3 0 2.2 0.2 0.28 0 1 -0 +-3 0 1.8 0.2 0.32 0 1 -0 +-3.4 0 2.2 0.16 0.28 0 1 -0 +-3 0 2.2 0.2 0.28 0 1 -0 +-2.6 0 1.8 0.24 0.32 0 1 -0 +-3 0 1.8 0.2 0.32 0 1 -0 +-2.6 0 2.2 0.24 0.28 0 1 -0 +-2.6 0 1.8 0.24 0.32 0 1 -0 +-3 0 2.2 0.2 0.28 0 1 -0 +-2.6 0 2.2 0.24 0.28 0 1 -0 +-2.2 0 1.8 0.28 0.32 0 1 -0 +-2.6 0 1.8 0.24 0.32 0 1 -0 +-2.2 0 2.2 0.28 0.28 0 1 -0 +-2.2 0 1.8 0.28 0.32 0 1 -0 +-2.6 0 2.2 0.24 0.28 0 1 -0 +-2.2 0 2.2 0.28 0.28 0 1 -0 +-1.8 0 1.8 0.32 0.32 0 1 -0 +-2.2 0 1.8 0.28 0.32 0 1 -0 +-1.8 0 2.2 0.32 0.28 0 1 -0 +-1.8 0 1.8 0.32 0.32 0 1 -0 +-2.2 0 2.2 0.28 0.28 0 1 -0 +-1.8 0 2.2 0.32 0.28 0 1 -0 +-1.4 0 1.8 0.36 0.32 0 1 -0 +-1.8 0 1.8 0.32 0.32 0 1 -0 +-1.4 0 2.2 0.36 0.28 0 1 -0 +-1.4 0 1.8 0.36 0.32 0 1 -0 +-1.8 0 2.2 0.32 0.28 0 1 -0 +-1.4 0 2.2 0.36 0.28 0 1 -0 +-1 0 1.8 0.4 0.32 0 1 -0 +-1.4 0 1.8 0.36 0.32 0 1 -0 +-1 0 2.2 0.4 0.28 0 1 -0 +-1 0 1.8 0.4 0.32 0 1 -0 +-1.4 0 2.2 0.36 0.28 0 1 -0 +-1 0 2.2 0.4 0.28 0 1 -0 +-0.6 0 1.8 0.44 0.32 0 1 -0 +-1 0 1.8 0.4 0.32 0 1 -0 +-0.6 0 2.2 0.44 0.28 0 1 -0 +-0.6 0 1.8 0.44 0.32 0 1 -0 +-1 0 2.2 0.4 0.28 0 1 -0 +-0.6 0 2.2 0.44 0.28 0 1 -0 +-0.2 0 1.8 0.48 0.32 0 1 -0 +-0.6 0 1.8 0.44 0.32 0 1 -0 +-0.2 0 2.2 0.48 0.28 0 1 -0 +-0.2 0 1.8 0.48 0.32 0 1 -0 +-0.6 0 2.2 0.44 0.28 0 1 -0 +-0.2 0 2.2 0.48 0.28 0 1 -0 +0.2 0 1.8 0.52 0.32 0 1 -0 +-0.2 0 1.8 0.48 0.32 0 1 -0 +0.2 0 2.2 0.52 0.28 0 1 -0 +0.2 0 1.8 0.52 0.32 0 1 -0 +-0.2 0 2.2 0.48 0.28 0 1 -0 +0.2 0 2.2 0.52 0.28 0 1 -0 +0.6 0 1.8 0.56 0.32 0 1 -0 +0.2 0 1.8 0.52 0.32 0 1 -0 +0.6 0 2.2 0.56 0.28 0 1 -0 +0.6 0 1.8 0.56 0.32 0 1 -0 +0.2 0 2.2 0.52 0.28 0 1 -0 +0.6 0 2.2 0.56 0.28 0 1 -0 +1 0 1.8 0.6 0.32 0 1 -0 +0.6 0 1.8 0.56 0.32 0 1 -0 +1 0 2.2 0.6 0.28 0 1 -0 +1 0 1.8 0.6 0.32 0 1 -0 +0.6 0 2.2 0.56 0.28 0 1 -0 +1 0 2.2 0.6 0.28 0 1 -0 +1.4 0 1.8 0.64 0.32 0 1 -0 +1 0 1.8 0.6 0.32 0 1 -0 +1.4 0 2.2 0.64 0.28 0 1 -0 +1.4 0 1.8 0.64 0.32 0 1 -0 +1 0 2.2 0.6 0.28 0 1 -0 +1.4 0 2.2 0.64 0.28 0 1 -0 +1.8 0 1.8 0.68 0.32 0 1 -0 +1.4 0 1.8 0.64 0.32 0 1 -0 +1.8 0 2.2 0.68 0.28 0 1 -0 +1.8 0 1.8 0.68 0.32 0 1 -0 +1.4 0 2.2 0.64 0.28 0 1 -0 +1.8 0 2.2 0.68 0.28 0 1 -0 +2.2 0 1.8 0.72 0.32 0 1 -0 +1.8 0 1.8 0.68 0.32 0 1 -0 +2.2 0 2.2 0.72 0.28 0 1 -0 +2.2 0 1.8 0.72 0.32 0 1 -0 +1.8 0 2.2 0.68 0.28 0 1 -0 +2.2 0 2.2 0.72 0.28 0 1 -0 +2.6 0 1.8 0.76 0.32 0 1 -0 +2.2 0 1.8 0.72 0.32 0 1 -0 +2.6 0 2.2 0.76 0.28 0 1 -0 +2.6 0 1.8 0.76 0.32 0 1 -0 +2.2 0 2.2 0.72 0.28 0 1 -0 +2.6 0 2.2 0.76 0.28 0 1 -0 +3 0 1.8 0.8 0.32 0 1 -0 +2.6 0 1.8 0.76 0.32 0 1 -0 +3 0 2.2 0.8 0.28 0 1 -0 +3 0 1.8 0.8 0.32 0 1 -0 +2.6 0 2.2 0.76 0.28 0 1 -0 +3 0 2.2 0.8 0.28 0 1 -0 +3.4 0 1.8 0.84 0.32 0 1 -0 +3 0 1.8 0.8 0.32 0 1 -0 +3.4 0 2.2 0.84 0.28 0 1 -0 +3.4 0 1.8 0.84 0.32 0 1 -0 +3 0 2.2 0.8 0.28 0 1 -0 +3.4 0 2.2 0.84 0.28 0 1 -0 +3.8 0 1.8 0.88 0.32 0 1 -0 +3.4 0 1.8 0.84 0.32 0 1 -0 +3.8 0 2.2 0.88 0.28 0 1 -0 +3.8 0 1.8 0.88 0.32 0 1 -0 +3.4 0 2.2 0.84 0.28 0 1 -0 +3.8 0 2.2 0.88 0.28 0 1 -0 +4.2 0 1.8 0.92 0.32 0 1 -0 +3.8 0 1.8 0.88 0.32 0 1 -0 +4.2 0 2.2 0.92 0.28 0 1 -0 +4.2 0 1.8 0.92 0.32 0 1 -0 +3.8 0 2.2 0.88 0.28 0 1 -0 +4.2 0 2.2 0.92 0.28 0 1 -0 +4.6 0 1.8 0.96 0.32 0 1 -0 +4.2 0 1.8 0.92 0.32 0 1 -0 +4.6 0 2.2 0.96 0.28 0 1 -0 +4.6 0 1.8 0.96 0.32 0 1 -0 +4.2 0 2.2 0.92 0.28 0 1 -0 +4.6 0 2.2 0.96 0.28 0 1 -0 +5 0 1.8 1 0.32 0 1 -0 +4.6 0 1.8 0.96 0.32 0 1 -0 +5 0 2.2 1 0.28 0 1 -0 +5 0 1.8 1 0.32 0 1 -0 +4.6 0 2.2 0.96 0.28 0 1 -0 +-5 0 2.6 0 0.24 0 1 -0 +-4.6 0 2.2 0.04 0.28 0 1 -0 +-5 0 2.2 0 0.28 0 1 -0 +-4.6 0 2.6 0.04 0.24 0 1 -0 +-4.6 0 2.2 0.04 0.28 0 1 -0 +-5 0 2.6 0 0.24 0 1 -0 +-4.6 0 2.6 0.04 0.24 0 1 -0 +-4.2 0 2.2 0.08 0.28 0 1 -0 +-4.6 0 2.2 0.04 0.28 0 1 -0 +-4.2 0 2.6 0.08 0.24 0 1 -0 +-4.2 0 2.2 0.08 0.28 0 1 -0 +-4.6 0 2.6 0.04 0.24 0 1 -0 +-4.2 0 2.6 0.08 0.24 0 1 -0 +-3.8 0 2.2 0.12 0.28 0 1 -0 +-4.2 0 2.2 0.08 0.28 0 1 -0 +-3.8 0 2.6 0.12 0.24 0 1 -0 +-3.8 0 2.2 0.12 0.28 0 1 -0 +-4.2 0 2.6 0.08 0.24 0 1 -0 +-3.8 0 2.6 0.12 0.24 0 1 -0 +-3.4 0 2.2 0.16 0.28 0 1 -0 +-3.8 0 2.2 0.12 0.28 0 1 -0 +-3.4 0 2.6 0.16 0.24 0 1 -0 +-3.4 0 2.2 0.16 0.28 0 1 -0 +-3.8 0 2.6 0.12 0.24 0 1 -0 +-3.4 0 2.6 0.16 0.24 0 1 -0 +-3 0 2.2 0.2 0.28 0 1 -0 +-3.4 0 2.2 0.16 0.28 0 1 -0 +-3 0 2.6 0.2 0.24 0 1 -0 +-3 0 2.2 0.2 0.28 0 1 -0 +-3.4 0 2.6 0.16 0.24 0 1 -0 +-3 0 2.6 0.2 0.24 0 1 -0 +-2.6 0 2.2 0.24 0.28 0 1 -0 +-3 0 2.2 0.2 0.28 0 1 -0 +-2.6 0 2.6 0.24 0.24 0 1 -0 +-2.6 0 2.2 0.24 0.28 0 1 -0 +-3 0 2.6 0.2 0.24 0 1 -0 +-2.6 0 2.6 0.24 0.24 0 1 -0 +-2.2 0 2.2 0.28 0.28 0 1 -0 +-2.6 0 2.2 0.24 0.28 0 1 -0 +-2.2 0 2.6 0.28 0.24 0 1 -0 +-2.2 0 2.2 0.28 0.28 0 1 -0 +-2.6 0 2.6 0.24 0.24 0 1 -0 +-2.2 0 2.6 0.28 0.24 0 1 -0 +-1.8 0 2.2 0.32 0.28 0 1 -0 +-2.2 0 2.2 0.28 0.28 0 1 -0 +-1.8 0 2.6 0.32 0.24 0 1 -0 +-1.8 0 2.2 0.32 0.28 0 1 -0 +-2.2 0 2.6 0.28 0.24 0 1 -0 +-1.8 0 2.6 0.32 0.24 0 1 -0 +-1.4 0 2.2 0.36 0.28 0 1 -0 +-1.8 0 2.2 0.32 0.28 0 1 -0 +-1.4 0 2.6 0.36 0.24 0 1 -0 +-1.4 0 2.2 0.36 0.28 0 1 -0 +-1.8 0 2.6 0.32 0.24 0 1 -0 +-1.4 0 2.6 0.36 0.24 0 1 -0 +-1 0 2.2 0.4 0.28 0 1 -0 +-1.4 0 2.2 0.36 0.28 0 1 -0 +-1 0 2.6 0.4 0.24 0 1 -0 +-1 0 2.2 0.4 0.28 0 1 -0 +-1.4 0 2.6 0.36 0.24 0 1 -0 +-1 0 2.6 0.4 0.24 0 1 -0 +-0.6 0 2.2 0.44 0.28 0 1 -0 +-1 0 2.2 0.4 0.28 0 1 -0 +-0.6 0 2.6 0.44 0.24 0 1 -0 +-0.6 0 2.2 0.44 0.28 0 1 -0 +-1 0 2.6 0.4 0.24 0 1 -0 +-0.6 0 2.6 0.44 0.24 0 1 -0 +-0.2 0 2.2 0.48 0.28 0 1 -0 +-0.6 0 2.2 0.44 0.28 0 1 -0 +-0.2 0 2.6 0.48 0.24 0 1 -0 +-0.2 0 2.2 0.48 0.28 0 1 -0 +-0.6 0 2.6 0.44 0.24 0 1 -0 +-0.2 0 2.6 0.48 0.24 0 1 -0 +0.2 0 2.2 0.52 0.28 0 1 -0 +-0.2 0 2.2 0.48 0.28 0 1 -0 +0.2 0 2.6 0.52 0.24 0 1 -0 +0.2 0 2.2 0.52 0.28 0 1 -0 +-0.2 0 2.6 0.48 0.24 0 1 -0 +0.2 0 2.6 0.52 0.24 0 1 -0 +0.6 0 2.2 0.56 0.28 0 1 -0 +0.2 0 2.2 0.52 0.28 0 1 -0 +0.6 0 2.6 0.56 0.24 0 1 -0 +0.6 0 2.2 0.56 0.28 0 1 -0 +0.2 0 2.6 0.52 0.24 0 1 -0 +0.6 0 2.6 0.56 0.24 0 1 -0 +1 0 2.2 0.6 0.28 0 1 -0 +0.6 0 2.2 0.56 0.28 0 1 -0 +1 0 2.6 0.6 0.24 0 1 -0 +1 0 2.2 0.6 0.28 0 1 -0 +0.6 0 2.6 0.56 0.24 0 1 -0 +1 0 2.6 0.6 0.24 0 1 -0 +1.4 0 2.2 0.64 0.28 0 1 -0 +1 0 2.2 0.6 0.28 0 1 -0 +1.4 0 2.6 0.64 0.24 0 1 -0 +1.4 0 2.2 0.64 0.28 0 1 -0 +1 0 2.6 0.6 0.24 0 1 -0 +1.4 0 2.6 0.64 0.24 0 1 -0 +1.8 0 2.2 0.68 0.28 0 1 -0 +1.4 0 2.2 0.64 0.28 0 1 -0 +1.8 0 2.6 0.68 0.24 0 1 -0 +1.8 0 2.2 0.68 0.28 0 1 -0 +1.4 0 2.6 0.64 0.24 0 1 -0 +1.8 0 2.6 0.68 0.24 0 1 -0 +2.2 0 2.2 0.72 0.28 0 1 -0 +1.8 0 2.2 0.68 0.28 0 1 -0 +2.2 0 2.6 0.72 0.24 0 1 -0 +2.2 0 2.2 0.72 0.28 0 1 -0 +1.8 0 2.6 0.68 0.24 0 1 -0 +2.2 0 2.6 0.72 0.24 0 1 -0 +2.6 0 2.2 0.76 0.28 0 1 -0 +2.2 0 2.2 0.72 0.28 0 1 -0 +2.6 0 2.6 0.76 0.24 0 1 -0 +2.6 0 2.2 0.76 0.28 0 1 -0 +2.2 0 2.6 0.72 0.24 0 1 -0 +2.6 0 2.6 0.76 0.24 0 1 -0 +3 0 2.2 0.8 0.28 0 1 -0 +2.6 0 2.2 0.76 0.28 0 1 -0 +3 0 2.6 0.8 0.24 0 1 -0 +3 0 2.2 0.8 0.28 0 1 -0 +2.6 0 2.6 0.76 0.24 0 1 -0 +3 0 2.6 0.8 0.24 0 1 -0 +3.4 0 2.2 0.84 0.28 0 1 -0 +3 0 2.2 0.8 0.28 0 1 -0 +3.4 0 2.6 0.84 0.24 0 1 -0 +3.4 0 2.2 0.84 0.28 0 1 -0 +3 0 2.6 0.8 0.24 0 1 -0 +3.4 0 2.6 0.84 0.24 0 1 -0 +3.8 0 2.2 0.88 0.28 0 1 -0 +3.4 0 2.2 0.84 0.28 0 1 -0 +3.8 0 2.6 0.88 0.24 0 1 -0 +3.8 0 2.2 0.88 0.28 0 1 -0 +3.4 0 2.6 0.84 0.24 0 1 -0 +3.8 0 2.6 0.88 0.24 0 1 -0 +4.2 0 2.2 0.92 0.28 0 1 -0 +3.8 0 2.2 0.88 0.28 0 1 -0 +4.2 0 2.6 0.92 0.24 0 1 -0 +4.2 0 2.2 0.92 0.28 0 1 -0 +3.8 0 2.6 0.88 0.24 0 1 -0 +4.2 0 2.6 0.92 0.24 0 1 -0 +4.6 0 2.2 0.96 0.28 0 1 -0 +4.2 0 2.2 0.92 0.28 0 1 -0 +4.6 0 2.6 0.96 0.24 0 1 -0 +4.6 0 2.2 0.96 0.28 0 1 -0 +4.2 0 2.6 0.92 0.24 0 1 -0 +4.6 0 2.6 0.96 0.24 0 1 -0 +5 0 2.2 1 0.28 0 1 -0 +4.6 0 2.2 0.96 0.28 0 1 -0 +5 0 2.6 1 0.24 0 1 -0 +5 0 2.2 1 0.28 0 1 -0 +4.6 0 2.6 0.96 0.24 0 1 -0 +-5 0 3 0 0.2 0 1 -0 +-4.6 0 2.6 0.04 0.24 0 1 -0 +-5 0 2.6 0 0.24 0 1 -0 +-4.6 0 3 0.04 0.2 0 1 -0 +-4.6 0 2.6 0.04 0.24 0 1 -0 +-5 0 3 0 0.2 0 1 -0 +-4.6 0 3 0.04 0.2 0 1 -0 +-4.2 0 2.6 0.08 0.24 0 1 -0 +-4.6 0 2.6 0.04 0.24 0 1 -0 +-4.2 0 3 0.08 0.2 0 1 -0 +-4.2 0 2.6 0.08 0.24 0 1 -0 +-4.6 0 3 0.04 0.2 0 1 -0 +-4.2 0 3 0.08 0.2 0 1 -0 +-3.8 0 2.6 0.12 0.24 0 1 -0 +-4.2 0 2.6 0.08 0.24 0 1 -0 +-3.8 0 3 0.12 0.2 0 1 -0 +-3.8 0 2.6 0.12 0.24 0 1 -0 +-4.2 0 3 0.08 0.2 0 1 -0 +-3.8 0 3 0.12 0.2 0 1 -0 +-3.4 0 2.6 0.16 0.24 0 1 -0 +-3.8 0 2.6 0.12 0.24 0 1 -0 +-3.4 0 3 0.16 0.2 0 1 -0 +-3.4 0 2.6 0.16 0.24 0 1 -0 +-3.8 0 3 0.12 0.2 0 1 -0 +-3.4 0 3 0.16 0.2 0 1 -0 +-3 0 2.6 0.2 0.24 0 1 -0 +-3.4 0 2.6 0.16 0.24 0 1 -0 +-3 0 3 0.2 0.2 0 1 -0 +-3 0 2.6 0.2 0.24 0 1 -0 +-3.4 0 3 0.16 0.2 0 1 -0 +-3 0 3 0.2 0.2 0 1 -0 +-2.6 0 2.6 0.24 0.24 0 1 -0 +-3 0 2.6 0.2 0.24 0 1 -0 +-2.6 0 3 0.24 0.2 0 1 -0 +-2.6 0 2.6 0.24 0.24 0 1 -0 +-3 0 3 0.2 0.2 0 1 -0 +-2.6 0 3 0.24 0.2 0 1 -0 +-2.2 0 2.6 0.28 0.24 0 1 -0 +-2.6 0 2.6 0.24 0.24 0 1 -0 +-2.2 0 3 0.28 0.2 0 1 -0 +-2.2 0 2.6 0.28 0.24 0 1 -0 +-2.6 0 3 0.24 0.2 0 1 -0 +-2.2 0 3 0.28 0.2 0 1 -0 +-1.8 0 2.6 0.32 0.24 0 1 -0 +-2.2 0 2.6 0.28 0.24 0 1 -0 +-1.8 0 3 0.32 0.2 0 1 -0 +-1.8 0 2.6 0.32 0.24 0 1 -0 +-2.2 0 3 0.28 0.2 0 1 -0 +-1.8 0 3 0.32 0.2 0 1 -0 +-1.4 0 2.6 0.36 0.24 0 1 -0 +-1.8 0 2.6 0.32 0.24 0 1 -0 +-1.4 0 3 0.36 0.2 0 1 -0 +-1.4 0 2.6 0.36 0.24 0 1 -0 +-1.8 0 3 0.32 0.2 0 1 -0 +-1.4 0 3 0.36 0.2 0 1 -0 +-1 0 2.6 0.4 0.24 0 1 -0 +-1.4 0 2.6 0.36 0.24 0 1 -0 +-1 0 3 0.4 0.2 0 1 -0 +-1 0 2.6 0.4 0.24 0 1 -0 +-1.4 0 3 0.36 0.2 0 1 -0 +-1 0 3 0.4 0.2 0 1 -0 +-0.6 0 2.6 0.44 0.24 0 1 -0 +-1 0 2.6 0.4 0.24 0 1 -0 +-0.6 0 3 0.44 0.2 0 1 -0 +-0.6 0 2.6 0.44 0.24 0 1 -0 +-1 0 3 0.4 0.2 0 1 -0 +-0.6 0 3 0.44 0.2 0 1 -0 +-0.2 0 2.6 0.48 0.24 0 1 -0 +-0.6 0 2.6 0.44 0.24 0 1 -0 +-0.2 0 3 0.48 0.2 0 1 -0 +-0.2 0 2.6 0.48 0.24 0 1 -0 +-0.6 0 3 0.44 0.2 0 1 -0 +-0.2 0 3 0.48 0.2 0 1 -0 +0.2 0 2.6 0.52 0.24 0 1 -0 +-0.2 0 2.6 0.48 0.24 0 1 -0 +0.2 0 3 0.52 0.2 0 1 -0 +0.2 0 2.6 0.52 0.24 0 1 -0 +-0.2 0 3 0.48 0.2 0 1 -0 +0.2 0 3 0.52 0.2 0 1 -0 +0.6 0 2.6 0.56 0.24 0 1 -0 +0.2 0 2.6 0.52 0.24 0 1 -0 +0.6 0 3 0.56 0.2 0 1 -0 +0.6 0 2.6 0.56 0.24 0 1 -0 +0.2 0 3 0.52 0.2 0 1 -0 +0.6 0 3 0.56 0.2 0 1 -0 +1 0 2.6 0.6 0.24 0 1 -0 +0.6 0 2.6 0.56 0.24 0 1 -0 +1 0 3 0.6 0.2 0 1 -0 +1 0 2.6 0.6 0.24 0 1 -0 +0.6 0 3 0.56 0.2 0 1 -0 +1 0 3 0.6 0.2 0 1 -0 +1.4 0 2.6 0.64 0.24 0 1 -0 +1 0 2.6 0.6 0.24 0 1 -0 +1.4 0 3 0.64 0.2 0 1 -0 +1.4 0 2.6 0.64 0.24 0 1 -0 +1 0 3 0.6 0.2 0 1 -0 +1.4 0 3 0.64 0.2 0 1 -0 +1.8 0 2.6 0.68 0.24 0 1 -0 +1.4 0 2.6 0.64 0.24 0 1 -0 +1.8 0 3 0.68 0.2 0 1 -0 +1.8 0 2.6 0.68 0.24 0 1 -0 +1.4 0 3 0.64 0.2 0 1 -0 +1.8 0 3 0.68 0.2 0 1 -0 +2.2 0 2.6 0.72 0.24 0 1 -0 +1.8 0 2.6 0.68 0.24 0 1 -0 +2.2 0 3 0.72 0.2 0 1 -0 +2.2 0 2.6 0.72 0.24 0 1 -0 +1.8 0 3 0.68 0.2 0 1 -0 +2.2 0 3 0.72 0.2 0 1 -0 +2.6 0 2.6 0.76 0.24 0 1 -0 +2.2 0 2.6 0.72 0.24 0 1 -0 +2.6 0 3 0.76 0.2 0 1 -0 +2.6 0 2.6 0.76 0.24 0 1 -0 +2.2 0 3 0.72 0.2 0 1 -0 +2.6 0 3 0.76 0.2 0 1 -0 +3 0 2.6 0.8 0.24 0 1 -0 +2.6 0 2.6 0.76 0.24 0 1 -0 +3 0 3 0.8 0.2 0 1 -0 +3 0 2.6 0.8 0.24 0 1 -0 +2.6 0 3 0.76 0.2 0 1 -0 +3 0 3 0.8 0.2 0 1 -0 +3.4 0 2.6 0.84 0.24 0 1 -0 +3 0 2.6 0.8 0.24 0 1 -0 +3.4 0 3 0.84 0.2 0 1 -0 +3.4 0 2.6 0.84 0.24 0 1 -0 +3 0 3 0.8 0.2 0 1 -0 +3.4 0 3 0.84 0.2 0 1 -0 +3.8 0 2.6 0.88 0.24 0 1 -0 +3.4 0 2.6 0.84 0.24 0 1 -0 +3.8 0 3 0.88 0.2 0 1 -0 +3.8 0 2.6 0.88 0.24 0 1 -0 +3.4 0 3 0.84 0.2 0 1 -0 +3.8 0 3 0.88 0.2 0 1 -0 +4.2 0 2.6 0.92 0.24 0 1 -0 +3.8 0 2.6 0.88 0.24 0 1 -0 +4.2 0 3 0.92 0.2 0 1 -0 +4.2 0 2.6 0.92 0.24 0 1 -0 +3.8 0 3 0.88 0.2 0 1 -0 +4.2 0 3 0.92 0.2 0 1 -0 +4.6 0 2.6 0.96 0.24 0 1 -0 +4.2 0 2.6 0.92 0.24 0 1 -0 +4.6 0 3 0.96 0.2 0 1 -0 +4.6 0 2.6 0.96 0.24 0 1 -0 +4.2 0 3 0.92 0.2 0 1 -0 +4.6 0 3 0.96 0.2 0 1 -0 +5 0 2.6 1 0.24 0 1 -0 +4.6 0 2.6 0.96 0.24 0 1 -0 +5 0 3 1 0.2 0 1 -0 +5 0 2.6 1 0.24 0 1 -0 +4.6 0 3 0.96 0.2 0 1 -0 +-5 0 3.4 0 0.16 0 1 -0 +-4.6 0 3 0.04 0.2 0 1 -0 +-5 0 3 0 0.2 0 1 -0 +-4.6 0 3.4 0.04 0.16 0 1 -0 +-4.6 0 3 0.04 0.2 0 1 -0 +-5 0 3.4 0 0.16 0 1 -0 +-4.6 0 3.4 0.04 0.16 0 1 -0 +-4.2 0 3 0.08 0.2 0 1 -0 +-4.6 0 3 0.04 0.2 0 1 -0 +-4.2 0 3.4 0.08 0.16 0 1 -0 +-4.2 0 3 0.08 0.2 0 1 -0 +-4.6 0 3.4 0.04 0.16 0 1 -0 +-4.2 0 3.4 0.08 0.16 0 1 -0 +-3.8 0 3 0.12 0.2 0 1 -0 +-4.2 0 3 0.08 0.2 0 1 -0 +-3.8 0 3.4 0.12 0.16 0 1 -0 +-3.8 0 3 0.12 0.2 0 1 -0 +-4.2 0 3.4 0.08 0.16 0 1 -0 +-3.8 0 3.4 0.12 0.16 0 1 -0 +-3.4 0 3 0.16 0.2 0 1 -0 +-3.8 0 3 0.12 0.2 0 1 -0 +-3.4 0 3.4 0.16 0.16 0 1 -0 +-3.4 0 3 0.16 0.2 0 1 -0 +-3.8 0 3.4 0.12 0.16 0 1 -0 +-3.4 0 3.4 0.16 0.16 0 1 -0 +-3 0 3 0.2 0.2 0 1 -0 +-3.4 0 3 0.16 0.2 0 1 -0 +-3 0 3.4 0.2 0.16 0 1 -0 +-3 0 3 0.2 0.2 0 1 -0 +-3.4 0 3.4 0.16 0.16 0 1 -0 +-3 0 3.4 0.2 0.16 0 1 -0 +-2.6 0 3 0.24 0.2 0 1 -0 +-3 0 3 0.2 0.2 0 1 -0 +-2.6 0 3.4 0.24 0.16 0 1 -0 +-2.6 0 3 0.24 0.2 0 1 -0 +-3 0 3.4 0.2 0.16 0 1 -0 +-2.6 0 3.4 0.24 0.16 0 1 -0 +-2.2 0 3 0.28 0.2 0 1 -0 +-2.6 0 3 0.24 0.2 0 1 -0 +-2.2 0 3.4 0.28 0.16 0 1 -0 +-2.2 0 3 0.28 0.2 0 1 -0 +-2.6 0 3.4 0.24 0.16 0 1 -0 +-2.2 0 3.4 0.28 0.16 0 1 -0 +-1.8 0 3 0.32 0.2 0 1 -0 +-2.2 0 3 0.28 0.2 0 1 -0 +-1.8 0 3.4 0.32 0.16 0 1 -0 +-1.8 0 3 0.32 0.2 0 1 -0 +-2.2 0 3.4 0.28 0.16 0 1 -0 +-1.8 0 3.4 0.32 0.16 0 1 -0 +-1.4 0 3 0.36 0.2 0 1 -0 +-1.8 0 3 0.32 0.2 0 1 -0 +-1.4 0 3.4 0.36 0.16 0 1 -0 +-1.4 0 3 0.36 0.2 0 1 -0 +-1.8 0 3.4 0.32 0.16 0 1 -0 +-1.4 0 3.4 0.36 0.16 0 1 -0 +-1 0 3 0.4 0.2 0 1 -0 +-1.4 0 3 0.36 0.2 0 1 -0 +-1 0 3.4 0.4 0.16 0 1 -0 +-1 0 3 0.4 0.2 0 1 -0 +-1.4 0 3.4 0.36 0.16 0 1 -0 +-1 0 3.4 0.4 0.16 0 1 -0 +-0.6 0 3 0.44 0.2 0 1 -0 +-1 0 3 0.4 0.2 0 1 -0 +-0.6 0 3.4 0.44 0.16 0 1 -0 +-0.6 0 3 0.44 0.2 0 1 -0 +-1 0 3.4 0.4 0.16 0 1 -0 +-0.6 0 3.4 0.44 0.16 0 1 -0 +-0.2 0 3 0.48 0.2 0 1 -0 +-0.6 0 3 0.44 0.2 0 1 -0 +-0.2 0 3.4 0.48 0.16 0 1 -0 +-0.2 0 3 0.48 0.2 0 1 -0 +-0.6 0 3.4 0.44 0.16 0 1 -0 +-0.2 0 3.4 0.48 0.16 0 1 -0 +0.2 0 3 0.52 0.2 0 1 -0 +-0.2 0 3 0.48 0.2 0 1 -0 +0.2 0 3.4 0.52 0.16 0 1 -0 +0.2 0 3 0.52 0.2 0 1 -0 +-0.2 0 3.4 0.48 0.16 0 1 -0 +0.2 0 3.4 0.52 0.16 0 1 -0 +0.6 0 3 0.56 0.2 0 1 -0 +0.2 0 3 0.52 0.2 0 1 -0 +0.6 0 3.4 0.56 0.16 0 1 -0 +0.6 0 3 0.56 0.2 0 1 -0 +0.2 0 3.4 0.52 0.16 0 1 -0 +0.6 0 3.4 0.56 0.16 0 1 -0 +1 0 3 0.6 0.2 0 1 -0 +0.6 0 3 0.56 0.2 0 1 -0 +1 0 3.4 0.6 0.16 0 1 -0 +1 0 3 0.6 0.2 0 1 -0 +0.6 0 3.4 0.56 0.16 0 1 -0 +1 0 3.4 0.6 0.16 0 1 -0 +1.4 0 3 0.64 0.2 0 1 -0 +1 0 3 0.6 0.2 0 1 -0 +1.4 0 3.4 0.64 0.16 0 1 -0 +1.4 0 3 0.64 0.2 0 1 -0 +1 0 3.4 0.6 0.16 0 1 -0 +1.4 0 3.4 0.64 0.16 0 1 -0 +1.8 0 3 0.68 0.2 0 1 -0 +1.4 0 3 0.64 0.2 0 1 -0 +1.8 0 3.4 0.68 0.16 0 1 -0 +1.8 0 3 0.68 0.2 0 1 -0 +1.4 0 3.4 0.64 0.16 0 1 -0 +1.8 0 3.4 0.68 0.16 0 1 -0 +2.2 0 3 0.72 0.2 0 1 -0 +1.8 0 3 0.68 0.2 0 1 -0 +2.2 0 3.4 0.72 0.16 0 1 -0 +2.2 0 3 0.72 0.2 0 1 -0 +1.8 0 3.4 0.68 0.16 0 1 -0 +2.2 0 3.4 0.72 0.16 0 1 -0 +2.6 0 3 0.76 0.2 0 1 -0 +2.2 0 3 0.72 0.2 0 1 -0 +2.6 0 3.4 0.76 0.16 0 1 -0 +2.6 0 3 0.76 0.2 0 1 -0 +2.2 0 3.4 0.72 0.16 0 1 -0 +2.6 0 3.4 0.76 0.16 0 1 -0 +3 0 3 0.8 0.2 0 1 -0 +2.6 0 3 0.76 0.2 0 1 -0 +3 0 3.4 0.8 0.16 0 1 -0 +3 0 3 0.8 0.2 0 1 -0 +2.6 0 3.4 0.76 0.16 0 1 -0 +3 0 3.4 0.8 0.16 0 1 -0 +3.4 0 3 0.84 0.2 0 1 -0 +3 0 3 0.8 0.2 0 1 -0 +3.4 0 3.4 0.84 0.16 0 1 -0 +3.4 0 3 0.84 0.2 0 1 -0 +3 0 3.4 0.8 0.16 0 1 -0 +3.4 0 3.4 0.84 0.16 0 1 -0 +3.8 0 3 0.88 0.2 0 1 -0 +3.4 0 3 0.84 0.2 0 1 -0 +3.8 0 3.4 0.88 0.16 0 1 -0 +3.8 0 3 0.88 0.2 0 1 -0 +3.4 0 3.4 0.84 0.16 0 1 -0 +3.8 0 3.4 0.88 0.16 0 1 -0 +4.2 0 3 0.92 0.2 0 1 -0 +3.8 0 3 0.88 0.2 0 1 -0 +4.2 0 3.4 0.92 0.16 0 1 -0 +4.2 0 3 0.92 0.2 0 1 -0 +3.8 0 3.4 0.88 0.16 0 1 -0 +4.2 0 3.4 0.92 0.16 0 1 -0 +4.6 0 3 0.96 0.2 0 1 -0 +4.2 0 3 0.92 0.2 0 1 -0 +4.6 0 3.4 0.96 0.16 0 1 -0 +4.6 0 3 0.96 0.2 0 1 -0 +4.2 0 3.4 0.92 0.16 0 1 -0 +4.6 0 3.4 0.96 0.16 0 1 -0 +5 0 3 1 0.2 0 1 -0 +4.6 0 3 0.96 0.2 0 1 -0 +5 0 3.4 1 0.16 0 1 -0 +5 0 3 1 0.2 0 1 -0 +4.6 0 3.4 0.96 0.16 0 1 -0 +-5 0 3.8 0 0.12 0 1 -0 +-4.6 0 3.4 0.04 0.16 0 1 -0 +-5 0 3.4 0 0.16 0 1 -0 +-4.6 0 3.8 0.04 0.12 0 1 -0 +-4.6 0 3.4 0.04 0.16 0 1 -0 +-5 0 3.8 0 0.12 0 1 -0 +-4.6 0 3.8 0.04 0.12 0 1 -0 +-4.2 0 3.4 0.08 0.16 0 1 -0 +-4.6 0 3.4 0.04 0.16 0 1 -0 +-4.2 0 3.8 0.08 0.12 0 1 -0 +-4.2 0 3.4 0.08 0.16 0 1 -0 +-4.6 0 3.8 0.04 0.12 0 1 -0 +-4.2 0 3.8 0.08 0.12 0 1 -0 +-3.8 0 3.4 0.12 0.16 0 1 -0 +-4.2 0 3.4 0.08 0.16 0 1 -0 +-3.8 0 3.8 0.12 0.12 0 1 -0 +-3.8 0 3.4 0.12 0.16 0 1 -0 +-4.2 0 3.8 0.08 0.12 0 1 -0 +-3.8 0 3.8 0.12 0.12 0 1 -0 +-3.4 0 3.4 0.16 0.16 0 1 -0 +-3.8 0 3.4 0.12 0.16 0 1 -0 +-3.4 0 3.8 0.16 0.12 0 1 -0 +-3.4 0 3.4 0.16 0.16 0 1 -0 +-3.8 0 3.8 0.12 0.12 0 1 -0 +-3.4 0 3.8 0.16 0.12 0 1 -0 +-3 0 3.4 0.2 0.16 0 1 -0 +-3.4 0 3.4 0.16 0.16 0 1 -0 +-3 0 3.8 0.2 0.12 0 1 -0 +-3 0 3.4 0.2 0.16 0 1 -0 +-3.4 0 3.8 0.16 0.12 0 1 -0 +-3 0 3.8 0.2 0.12 0 1 -0 +-2.6 0 3.4 0.24 0.16 0 1 -0 +-3 0 3.4 0.2 0.16 0 1 -0 +-2.6 0 3.8 0.24 0.12 0 1 -0 +-2.6 0 3.4 0.24 0.16 0 1 -0 +-3 0 3.8 0.2 0.12 0 1 -0 +-2.6 0 3.8 0.24 0.12 0 1 -0 +-2.2 0 3.4 0.28 0.16 0 1 -0 +-2.6 0 3.4 0.24 0.16 0 1 -0 +-2.2 0 3.8 0.28 0.12 0 1 -0 +-2.2 0 3.4 0.28 0.16 0 1 -0 +-2.6 0 3.8 0.24 0.12 0 1 -0 +-2.2 0 3.8 0.28 0.12 0 1 -0 +-1.8 0 3.4 0.32 0.16 0 1 -0 +-2.2 0 3.4 0.28 0.16 0 1 -0 +-1.8 0 3.8 0.32 0.12 0 1 -0 +-1.8 0 3.4 0.32 0.16 0 1 -0 +-2.2 0 3.8 0.28 0.12 0 1 -0 +-1.8 0 3.8 0.32 0.12 0 1 -0 +-1.4 0 3.4 0.36 0.16 0 1 -0 +-1.8 0 3.4 0.32 0.16 0 1 -0 +-1.4 0 3.8 0.36 0.12 0 1 -0 +-1.4 0 3.4 0.36 0.16 0 1 -0 +-1.8 0 3.8 0.32 0.12 0 1 -0 +-1.4 0 3.8 0.36 0.12 0 1 -0 +-1 0 3.4 0.4 0.16 0 1 -0 +-1.4 0 3.4 0.36 0.16 0 1 -0 +-1 0 3.8 0.4 0.12 0 1 -0 +-1 0 3.4 0.4 0.16 0 1 -0 +-1.4 0 3.8 0.36 0.12 0 1 -0 +-1 0 3.8 0.4 0.12 0 1 -0 +-0.6 0 3.4 0.44 0.16 0 1 -0 +-1 0 3.4 0.4 0.16 0 1 -0 +-0.6 0 3.8 0.44 0.12 0 1 -0 +-0.6 0 3.4 0.44 0.16 0 1 -0 +-1 0 3.8 0.4 0.12 0 1 -0 +-0.6 0 3.8 0.44 0.12 0 1 -0 +-0.2 0 3.4 0.48 0.16 0 1 -0 +-0.6 0 3.4 0.44 0.16 0 1 -0 +-0.2 0 3.8 0.48 0.12 0 1 -0 +-0.2 0 3.4 0.48 0.16 0 1 -0 +-0.6 0 3.8 0.44 0.12 0 1 -0 +-0.2 0 3.8 0.48 0.12 0 1 -0 +0.2 0 3.4 0.52 0.16 0 1 -0 +-0.2 0 3.4 0.48 0.16 0 1 -0 +0.2 0 3.8 0.52 0.12 0 1 -0 +0.2 0 3.4 0.52 0.16 0 1 -0 +-0.2 0 3.8 0.48 0.12 0 1 -0 +0.2 0 3.8 0.52 0.12 0 1 -0 +0.6 0 3.4 0.56 0.16 0 1 -0 +0.2 0 3.4 0.52 0.16 0 1 -0 +0.6 0 3.8 0.56 0.12 0 1 -0 +0.6 0 3.4 0.56 0.16 0 1 -0 +0.2 0 3.8 0.52 0.12 0 1 -0 +0.6 0 3.8 0.56 0.12 0 1 -0 +1 0 3.4 0.6 0.16 0 1 -0 +0.6 0 3.4 0.56 0.16 0 1 -0 +1 0 3.8 0.6 0.12 0 1 -0 +1 0 3.4 0.6 0.16 0 1 -0 +0.6 0 3.8 0.56 0.12 0 1 -0 +1 0 3.8 0.6 0.12 0 1 -0 +1.4 0 3.4 0.64 0.16 0 1 -0 +1 0 3.4 0.6 0.16 0 1 -0 +1.4 0 3.8 0.64 0.12 0 1 -0 +1.4 0 3.4 0.64 0.16 0 1 -0 +1 0 3.8 0.6 0.12 0 1 -0 +1.4 0 3.8 0.64 0.12 0 1 -0 +1.8 0 3.4 0.68 0.16 0 1 -0 +1.4 0 3.4 0.64 0.16 0 1 -0 +1.8 0 3.8 0.68 0.12 0 1 -0 +1.8 0 3.4 0.68 0.16 0 1 -0 +1.4 0 3.8 0.64 0.12 0 1 -0 +1.8 0 3.8 0.68 0.12 0 1 -0 +2.2 0 3.4 0.72 0.16 0 1 -0 +1.8 0 3.4 0.68 0.16 0 1 -0 +2.2 0 3.8 0.72 0.12 0 1 -0 +2.2 0 3.4 0.72 0.16 0 1 -0 +1.8 0 3.8 0.68 0.12 0 1 -0 +2.2 0 3.8 0.72 0.12 0 1 -0 +2.6 0 3.4 0.76 0.16 0 1 -0 +2.2 0 3.4 0.72 0.16 0 1 -0 +2.6 0 3.8 0.76 0.12 0 1 -0 +2.6 0 3.4 0.76 0.16 0 1 -0 +2.2 0 3.8 0.72 0.12 0 1 -0 +2.6 0 3.8 0.76 0.12 0 1 -0 +3 0 3.4 0.8 0.16 0 1 -0 +2.6 0 3.4 0.76 0.16 0 1 -0 +3 0 3.8 0.8 0.12 0 1 -0 +3 0 3.4 0.8 0.16 0 1 -0 +2.6 0 3.8 0.76 0.12 0 1 -0 +3 0 3.8 0.8 0.12 0 1 -0 +3.4 0 3.4 0.84 0.16 0 1 -0 +3 0 3.4 0.8 0.16 0 1 -0 +3.4 0 3.8 0.84 0.12 0 1 -0 +3.4 0 3.4 0.84 0.16 0 1 -0 +3 0 3.8 0.8 0.12 0 1 -0 +3.4 0 3.8 0.84 0.12 0 1 -0 +3.8 0 3.4 0.88 0.16 0 1 -0 +3.4 0 3.4 0.84 0.16 0 1 -0 +3.8 0 3.8 0.88 0.12 0 1 -0 +3.8 0 3.4 0.88 0.16 0 1 -0 +3.4 0 3.8 0.84 0.12 0 1 -0 +3.8 0 3.8 0.88 0.12 0 1 -0 +4.2 0 3.4 0.92 0.16 0 1 -0 +3.8 0 3.4 0.88 0.16 0 1 -0 +4.2 0 3.8 0.92 0.12 0 1 -0 +4.2 0 3.4 0.92 0.16 0 1 -0 +3.8 0 3.8 0.88 0.12 0 1 -0 +4.2 0 3.8 0.92 0.12 0 1 -0 +4.6 0 3.4 0.96 0.16 0 1 -0 +4.2 0 3.4 0.92 0.16 0 1 -0 +4.6 0 3.8 0.96 0.12 0 1 -0 +4.6 0 3.4 0.96 0.16 0 1 -0 +4.2 0 3.8 0.92 0.12 0 1 -0 +4.6 0 3.8 0.96 0.12 0 1 -0 +5 0 3.4 1 0.16 0 1 -0 +4.6 0 3.4 0.96 0.16 0 1 -0 +5 0 3.8 1 0.12 0 1 -0 +5 0 3.4 1 0.16 0 1 -0 +4.6 0 3.8 0.96 0.12 0 1 -0 +-5 0 4.2 0 0.08 0 1 -0 +-4.6 0 3.8 0.04 0.12 0 1 -0 +-5 0 3.8 0 0.12 0 1 -0 +-4.6 0 4.2 0.04 0.08 0 1 -0 +-4.6 0 3.8 0.04 0.12 0 1 -0 +-5 0 4.2 0 0.08 0 1 -0 +-4.6 0 4.2 0.04 0.08 0 1 -0 +-4.2 0 3.8 0.08 0.12 0 1 -0 +-4.6 0 3.8 0.04 0.12 0 1 -0 +-4.2 0 4.2 0.08 0.08 0 1 -0 +-4.2 0 3.8 0.08 0.12 0 1 -0 +-4.6 0 4.2 0.04 0.08 0 1 -0 +-4.2 0 4.2 0.08 0.08 0 1 -0 +-3.8 0 3.8 0.12 0.12 0 1 -0 +-4.2 0 3.8 0.08 0.12 0 1 -0 +-3.8 0 4.2 0.12 0.08 0 1 -0 +-3.8 0 3.8 0.12 0.12 0 1 -0 +-4.2 0 4.2 0.08 0.08 0 1 -0 +-3.8 0 4.2 0.12 0.08 0 1 -0 +-3.4 0 3.8 0.16 0.12 0 1 -0 +-3.8 0 3.8 0.12 0.12 0 1 -0 +-3.4 0 4.2 0.16 0.08 0 1 -0 +-3.4 0 3.8 0.16 0.12 0 1 -0 +-3.8 0 4.2 0.12 0.08 0 1 -0 +-3.4 0 4.2 0.16 0.08 0 1 -0 +-3 0 3.8 0.2 0.12 0 1 -0 +-3.4 0 3.8 0.16 0.12 0 1 -0 +-3 0 4.2 0.2 0.08 0 1 -0 +-3 0 3.8 0.2 0.12 0 1 -0 +-3.4 0 4.2 0.16 0.08 0 1 -0 +-3 0 4.2 0.2 0.08 0 1 -0 +-2.6 0 3.8 0.24 0.12 0 1 -0 +-3 0 3.8 0.2 0.12 0 1 -0 +-2.6 0 4.2 0.24 0.08 0 1 -0 +-2.6 0 3.8 0.24 0.12 0 1 -0 +-3 0 4.2 0.2 0.08 0 1 -0 +-2.6 0 4.2 0.24 0.08 0 1 -0 +-2.2 0 3.8 0.28 0.12 0 1 -0 +-2.6 0 3.8 0.24 0.12 0 1 -0 +-2.2 0 4.2 0.28 0.08 0 1 -0 +-2.2 0 3.8 0.28 0.12 0 1 -0 +-2.6 0 4.2 0.24 0.08 0 1 -0 +-2.2 0 4.2 0.28 0.08 0 1 -0 +-1.8 0 3.8 0.32 0.12 0 1 -0 +-2.2 0 3.8 0.28 0.12 0 1 -0 +-1.8 0 4.2 0.32 0.08 0 1 -0 +-1.8 0 3.8 0.32 0.12 0 1 -0 +-2.2 0 4.2 0.28 0.08 0 1 -0 +-1.8 0 4.2 0.32 0.08 0 1 -0 +-1.4 0 3.8 0.36 0.12 0 1 -0 +-1.8 0 3.8 0.32 0.12 0 1 -0 +-1.4 0 4.2 0.36 0.08 0 1 -0 +-1.4 0 3.8 0.36 0.12 0 1 -0 +-1.8 0 4.2 0.32 0.08 0 1 -0 +-1.4 0 4.2 0.36 0.08 0 1 -0 +-1 0 3.8 0.4 0.12 0 1 -0 +-1.4 0 3.8 0.36 0.12 0 1 -0 +-1 0 4.2 0.4 0.08 0 1 -0 +-1 0 3.8 0.4 0.12 0 1 -0 +-1.4 0 4.2 0.36 0.08 0 1 -0 +-1 0 4.2 0.4 0.08 0 1 -0 +-0.6 0 3.8 0.44 0.12 0 1 -0 +-1 0 3.8 0.4 0.12 0 1 -0 +-0.6 0 4.2 0.44 0.08 0 1 -0 +-0.6 0 3.8 0.44 0.12 0 1 -0 +-1 0 4.2 0.4 0.08 0 1 -0 +-0.6 0 4.2 0.44 0.08 0 1 -0 +-0.2 0 3.8 0.48 0.12 0 1 -0 +-0.6 0 3.8 0.44 0.12 0 1 -0 +-0.2 0 4.2 0.48 0.08 0 1 -0 +-0.2 0 3.8 0.48 0.12 0 1 -0 +-0.6 0 4.2 0.44 0.08 0 1 -0 +-0.2 0 4.2 0.48 0.08 0 1 -0 +0.2 0 3.8 0.52 0.12 0 1 -0 +-0.2 0 3.8 0.48 0.12 0 1 -0 +0.2 0 4.2 0.52 0.08 0 1 -0 +0.2 0 3.8 0.52 0.12 0 1 -0 +-0.2 0 4.2 0.48 0.08 0 1 -0 +0.2 0 4.2 0.52 0.08 0 1 -0 +0.6 0 3.8 0.56 0.12 0 1 -0 +0.2 0 3.8 0.52 0.12 0 1 -0 +0.6 0 4.2 0.56 0.08 0 1 -0 +0.6 0 3.8 0.56 0.12 0 1 -0 +0.2 0 4.2 0.52 0.08 0 1 -0 +0.6 0 4.2 0.56 0.08 0 1 -0 +1 0 3.8 0.6 0.12 0 1 -0 +0.6 0 3.8 0.56 0.12 0 1 -0 +1 0 4.2 0.6 0.08 0 1 -0 +1 0 3.8 0.6 0.12 0 1 -0 +0.6 0 4.2 0.56 0.08 0 1 -0 +1 0 4.2 0.6 0.08 0 1 -0 +1.4 0 3.8 0.64 0.12 0 1 -0 +1 0 3.8 0.6 0.12 0 1 -0 +1.4 0 4.2 0.64 0.08 0 1 -0 +1.4 0 3.8 0.64 0.12 0 1 -0 +1 0 4.2 0.6 0.08 0 1 -0 +1.4 0 4.2 0.64 0.08 0 1 -0 +1.8 0 3.8 0.68 0.12 0 1 -0 +1.4 0 3.8 0.64 0.12 0 1 -0 +1.8 0 4.2 0.68 0.08 0 1 -0 +1.8 0 3.8 0.68 0.12 0 1 -0 +1.4 0 4.2 0.64 0.08 0 1 -0 +1.8 0 4.2 0.68 0.08 0 1 -0 +2.2 0 3.8 0.72 0.12 0 1 -0 +1.8 0 3.8 0.68 0.12 0 1 -0 +2.2 0 4.2 0.72 0.08 0 1 -0 +2.2 0 3.8 0.72 0.12 0 1 -0 +1.8 0 4.2 0.68 0.08 0 1 -0 +2.2 0 4.2 0.72 0.08 0 1 -0 +2.6 0 3.8 0.76 0.12 0 1 -0 +2.2 0 3.8 0.72 0.12 0 1 -0 +2.6 0 4.2 0.76 0.08 0 1 -0 +2.6 0 3.8 0.76 0.12 0 1 -0 +2.2 0 4.2 0.72 0.08 0 1 -0 +2.6 0 4.2 0.76 0.08 0 1 -0 +3 0 3.8 0.8 0.12 0 1 -0 +2.6 0 3.8 0.76 0.12 0 1 -0 +3 0 4.2 0.8 0.08 0 1 -0 +3 0 3.8 0.8 0.12 0 1 -0 +2.6 0 4.2 0.76 0.08 0 1 -0 +3 0 4.2 0.8 0.08 0 1 -0 +3.4 0 3.8 0.84 0.12 0 1 -0 +3 0 3.8 0.8 0.12 0 1 -0 +3.4 0 4.2 0.84 0.08 0 1 -0 +3.4 0 3.8 0.84 0.12 0 1 -0 +3 0 4.2 0.8 0.08 0 1 -0 +3.4 0 4.2 0.84 0.08 0 1 -0 +3.8 0 3.8 0.88 0.12 0 1 -0 +3.4 0 3.8 0.84 0.12 0 1 -0 +3.8 0 4.2 0.88 0.08 0 1 -0 +3.8 0 3.8 0.88 0.12 0 1 -0 +3.4 0 4.2 0.84 0.08 0 1 -0 +3.8 0 4.2 0.88 0.08 0 1 -0 +4.2 0 3.8 0.92 0.12 0 1 -0 +3.8 0 3.8 0.88 0.12 0 1 -0 +4.2 0 4.2 0.92 0.08 0 1 -0 +4.2 0 3.8 0.92 0.12 0 1 -0 +3.8 0 4.2 0.88 0.08 0 1 -0 +4.2 0 4.2 0.92 0.08 0 1 -0 +4.6 0 3.8 0.96 0.12 0 1 -0 +4.2 0 3.8 0.92 0.12 0 1 -0 +4.6 0 4.2 0.96 0.08 0 1 -0 +4.6 0 3.8 0.96 0.12 0 1 -0 +4.2 0 4.2 0.92 0.08 0 1 -0 +4.6 0 4.2 0.96 0.08 0 1 -0 +5 0 3.8 1 0.12 0 1 -0 +4.6 0 3.8 0.96 0.12 0 1 -0 +5 0 4.2 1 0.08 0 1 -0 +5 0 3.8 1 0.12 0 1 -0 +4.6 0 4.2 0.96 0.08 0 1 -0 +-5 0 4.6 0 0.04 0 1 -0 +-4.6 0 4.2 0.04 0.08 0 1 -0 +-5 0 4.2 0 0.08 0 1 -0 +-4.6 0 4.6 0.04 0.04 0 1 -0 +-4.6 0 4.2 0.04 0.08 0 1 -0 +-5 0 4.6 0 0.04 0 1 -0 +-4.6 0 4.6 0.04 0.04 0 1 -0 +-4.2 0 4.2 0.08 0.08 0 1 -0 +-4.6 0 4.2 0.04 0.08 0 1 -0 +-4.2 0 4.6 0.08 0.04 0 1 -0 +-4.2 0 4.2 0.08 0.08 0 1 -0 +-4.6 0 4.6 0.04 0.04 0 1 -0 +-4.2 0 4.6 0.08 0.04 0 1 -0 +-3.8 0 4.2 0.12 0.08 0 1 -0 +-4.2 0 4.2 0.08 0.08 0 1 -0 +-3.8 0 4.6 0.12 0.04 0 1 -0 +-3.8 0 4.2 0.12 0.08 0 1 -0 +-4.2 0 4.6 0.08 0.04 0 1 -0 +-3.8 0 4.6 0.12 0.04 0 1 -0 +-3.4 0 4.2 0.16 0.08 0 1 -0 +-3.8 0 4.2 0.12 0.08 0 1 -0 +-3.4 0 4.6 0.16 0.04 0 1 -0 +-3.4 0 4.2 0.16 0.08 0 1 -0 +-3.8 0 4.6 0.12 0.04 0 1 -0 +-3.4 0 4.6 0.16 0.04 0 1 -0 +-3 0 4.2 0.2 0.08 0 1 -0 +-3.4 0 4.2 0.16 0.08 0 1 -0 +-3 0 4.6 0.2 0.04 0 1 -0 +-3 0 4.2 0.2 0.08 0 1 -0 +-3.4 0 4.6 0.16 0.04 0 1 -0 +-3 0 4.6 0.2 0.04 0 1 -0 +-2.6 0 4.2 0.24 0.08 0 1 -0 +-3 0 4.2 0.2 0.08 0 1 -0 +-2.6 0 4.6 0.24 0.04 0 1 -0 +-2.6 0 4.2 0.24 0.08 0 1 -0 +-3 0 4.6 0.2 0.04 0 1 -0 +-2.6 0 4.6 0.24 0.04 0 1 -0 +-2.2 0 4.2 0.28 0.08 0 1 -0 +-2.6 0 4.2 0.24 0.08 0 1 -0 +-2.2 0 4.6 0.28 0.04 0 1 -0 +-2.2 0 4.2 0.28 0.08 0 1 -0 +-2.6 0 4.6 0.24 0.04 0 1 -0 +-2.2 0 4.6 0.28 0.04 0 1 -0 +-1.8 0 4.2 0.32 0.08 0 1 -0 +-2.2 0 4.2 0.28 0.08 0 1 -0 +-1.8 0 4.6 0.32 0.04 0 1 -0 +-1.8 0 4.2 0.32 0.08 0 1 -0 +-2.2 0 4.6 0.28 0.04 0 1 -0 +-1.8 0 4.6 0.32 0.04 0 1 -0 +-1.4 0 4.2 0.36 0.08 0 1 -0 +-1.8 0 4.2 0.32 0.08 0 1 -0 +-1.4 0 4.6 0.36 0.04 0 1 -0 +-1.4 0 4.2 0.36 0.08 0 1 -0 +-1.8 0 4.6 0.32 0.04 0 1 -0 +-1.4 0 4.6 0.36 0.04 0 1 -0 +-1 0 4.2 0.4 0.08 0 1 -0 +-1.4 0 4.2 0.36 0.08 0 1 -0 +-1 0 4.6 0.4 0.04 0 1 -0 +-1 0 4.2 0.4 0.08 0 1 -0 +-1.4 0 4.6 0.36 0.04 0 1 -0 +-1 0 4.6 0.4 0.04 0 1 -0 +-0.6 0 4.2 0.44 0.08 0 1 -0 +-1 0 4.2 0.4 0.08 0 1 -0 +-0.6 0 4.6 0.44 0.04 0 1 -0 +-0.6 0 4.2 0.44 0.08 0 1 -0 +-1 0 4.6 0.4 0.04 0 1 -0 +-0.6 0 4.6 0.44 0.04 0 1 -0 +-0.2 0 4.2 0.48 0.08 0 1 -0 +-0.6 0 4.2 0.44 0.08 0 1 -0 +-0.2 0 4.6 0.48 0.04 0 1 -0 +-0.2 0 4.2 0.48 0.08 0 1 -0 +-0.6 0 4.6 0.44 0.04 0 1 -0 +-0.2 0 4.6 0.48 0.04 0 1 -0 +0.2 0 4.2 0.52 0.08 0 1 -0 +-0.2 0 4.2 0.48 0.08 0 1 -0 +0.2 0 4.6 0.52 0.04 0 1 -0 +0.2 0 4.2 0.52 0.08 0 1 -0 +-0.2 0 4.6 0.48 0.04 0 1 -0 +0.2 0 4.6 0.52 0.04 0 1 -0 +0.6 0 4.2 0.56 0.08 0 1 -0 +0.2 0 4.2 0.52 0.08 0 1 -0 +0.6 0 4.6 0.56 0.04 0 1 -0 +0.6 0 4.2 0.56 0.08 0 1 -0 +0.2 0 4.6 0.52 0.04 0 1 -0 +0.6 0 4.6 0.56 0.04 0 1 -0 +1 0 4.2 0.6 0.08 0 1 -0 +0.6 0 4.2 0.56 0.08 0 1 -0 +1 0 4.6 0.6 0.04 0 1 -0 +1 0 4.2 0.6 0.08 0 1 -0 +0.6 0 4.6 0.56 0.04 0 1 -0 +1 0 4.6 0.6 0.04 0 1 -0 +1.4 0 4.2 0.64 0.08 0 1 -0 +1 0 4.2 0.6 0.08 0 1 -0 +1.4 0 4.6 0.64 0.04 0 1 -0 +1.4 0 4.2 0.64 0.08 0 1 -0 +1 0 4.6 0.6 0.04 0 1 -0 +1.4 0 4.6 0.64 0.04 0 1 -0 +1.8 0 4.2 0.68 0.08 0 1 -0 +1.4 0 4.2 0.64 0.08 0 1 -0 +1.8 0 4.6 0.68 0.04 0 1 -0 +1.8 0 4.2 0.68 0.08 0 1 -0 +1.4 0 4.6 0.64 0.04 0 1 -0 +1.8 0 4.6 0.68 0.04 0 1 -0 +2.2 0 4.2 0.72 0.08 0 1 -0 +1.8 0 4.2 0.68 0.08 0 1 -0 +2.2 0 4.6 0.72 0.04 0 1 -0 +2.2 0 4.2 0.72 0.08 0 1 -0 +1.8 0 4.6 0.68 0.04 0 1 -0 +2.2 0 4.6 0.72 0.04 0 1 -0 +2.6 0 4.2 0.76 0.08 0 1 -0 +2.2 0 4.2 0.72 0.08 0 1 -0 +2.6 0 4.6 0.76 0.04 0 1 -0 +2.6 0 4.2 0.76 0.08 0 1 -0 +2.2 0 4.6 0.72 0.04 0 1 -0 +2.6 0 4.6 0.76 0.04 0 1 -0 +3 0 4.2 0.8 0.08 0 1 -0 +2.6 0 4.2 0.76 0.08 0 1 -0 +3 0 4.6 0.8 0.04 0 1 -0 +3 0 4.2 0.8 0.08 0 1 -0 +2.6 0 4.6 0.76 0.04 0 1 -0 +3 0 4.6 0.8 0.04 0 1 -0 +3.4 0 4.2 0.84 0.08 0 1 -0 +3 0 4.2 0.8 0.08 0 1 -0 +3.4 0 4.6 0.84 0.04 0 1 -0 +3.4 0 4.2 0.84 0.08 0 1 -0 +3 0 4.6 0.8 0.04 0 1 -0 +3.4 0 4.6 0.84 0.04 0 1 -0 +3.8 0 4.2 0.88 0.08 0 1 -0 +3.4 0 4.2 0.84 0.08 0 1 -0 +3.8 0 4.6 0.88 0.04 0 1 -0 +3.8 0 4.2 0.88 0.08 0 1 -0 +3.4 0 4.6 0.84 0.04 0 1 -0 +3.8 0 4.6 0.88 0.04 0 1 -0 +4.2 0 4.2 0.92 0.08 0 1 -0 +3.8 0 4.2 0.88 0.08 0 1 -0 +4.2 0 4.6 0.92 0.04 0 1 -0 +4.2 0 4.2 0.92 0.08 0 1 -0 +3.8 0 4.6 0.88 0.04 0 1 -0 +4.2 0 4.6 0.92 0.04 0 1 -0 +4.6 0 4.2 0.96 0.08 0 1 -0 +4.2 0 4.2 0.92 0.08 0 1 -0 +4.6 0 4.6 0.96 0.04 0 1 -0 +4.6 0 4.2 0.96 0.08 0 1 -0 +4.2 0 4.6 0.92 0.04 0 1 -0 +4.6 0 4.6 0.96 0.04 0 1 -0 +5 0 4.2 1 0.08 0 1 -0 +4.6 0 4.2 0.96 0.08 0 1 -0 +5 0 4.6 1 0.04 0 1 -0 +5 0 4.2 1 0.08 0 1 -0 +4.6 0 4.6 0.96 0.04 0 1 -0 +-5 0 5 0 0 0 1 -0 +-4.6 0 4.6 0.04 0.04 0 1 -0 +-5 0 4.6 0 0.04 0 1 -0 +-4.6 0 5 0.04 0 0 1 -0 +-4.6 0 4.6 0.04 0.04 0 1 -0 +-5 0 5 0 0 0 1 -0 +-4.6 0 5 0.04 0 0 1 -0 +-4.2 0 4.6 0.08 0.04 0 1 -0 +-4.6 0 4.6 0.04 0.04 0 1 -0 +-4.2 0 5 0.08 0 0 1 -0 +-4.2 0 4.6 0.08 0.04 0 1 -0 +-4.6 0 5 0.04 0 0 1 -0 +-4.2 0 5 0.08 0 0 1 -0 +-3.8 0 4.6 0.12 0.04 0 1 -0 +-4.2 0 4.6 0.08 0.04 0 1 -0 +-3.8 0 5 0.12 0 0 1 -0 +-3.8 0 4.6 0.12 0.04 0 1 -0 +-4.2 0 5 0.08 0 0 1 -0 +-3.8 0 5 0.12 0 0 1 -0 +-3.4 0 4.6 0.16 0.04 0 1 -0 +-3.8 0 4.6 0.12 0.04 0 1 -0 +-3.4 0 5 0.16 0 0 1 -0 +-3.4 0 4.6 0.16 0.04 0 1 -0 +-3.8 0 5 0.12 0 0 1 -0 +-3.4 0 5 0.16 0 0 1 -0 +-3 0 4.6 0.2 0.04 0 1 -0 +-3.4 0 4.6 0.16 0.04 0 1 -0 +-3 0 5 0.2 0 0 1 -0 +-3 0 4.6 0.2 0.04 0 1 -0 +-3.4 0 5 0.16 0 0 1 -0 +-3 0 5 0.2 0 0 1 -0 +-2.6 0 4.6 0.24 0.04 0 1 -0 +-3 0 4.6 0.2 0.04 0 1 -0 +-2.6 0 5 0.24 0 0 1 -0 +-2.6 0 4.6 0.24 0.04 0 1 -0 +-3 0 5 0.2 0 0 1 -0 +-2.6 0 5 0.24 0 0 1 -0 +-2.2 0 4.6 0.28 0.04 0 1 -0 +-2.6 0 4.6 0.24 0.04 0 1 -0 +-2.2 0 5 0.28 0 0 1 -0 +-2.2 0 4.6 0.28 0.04 0 1 -0 +-2.6 0 5 0.24 0 0 1 -0 +-2.2 0 5 0.28 0 0 1 -0 +-1.8 0 4.6 0.32 0.04 0 1 -0 +-2.2 0 4.6 0.28 0.04 0 1 -0 +-1.8 0 5 0.32 0 0 1 -0 +-1.8 0 4.6 0.32 0.04 0 1 -0 +-2.2 0 5 0.28 0 0 1 -0 +-1.8 0 5 0.32 0 0 1 -0 +-1.4 0 4.6 0.36 0.04 0 1 -0 +-1.8 0 4.6 0.32 0.04 0 1 -0 +-1.4 0 5 0.36 0 0 1 -0 +-1.4 0 4.6 0.36 0.04 0 1 -0 +-1.8 0 5 0.32 0 0 1 -0 +-1.4 0 5 0.36 0 0 1 -0 +-1 0 4.6 0.4 0.04 0 1 -0 +-1.4 0 4.6 0.36 0.04 0 1 -0 +-1 0 5 0.4 0 0 1 -0 +-1 0 4.6 0.4 0.04 0 1 -0 +-1.4 0 5 0.36 0 0 1 -0 +-1 0 5 0.4 0 0 1 -0 +-0.6 0 4.6 0.44 0.04 0 1 -0 +-1 0 4.6 0.4 0.04 0 1 -0 +-0.6 0 5 0.44 0 0 1 -0 +-0.6 0 4.6 0.44 0.04 0 1 -0 +-1 0 5 0.4 0 0 1 -0 +-0.6 0 5 0.44 0 0 1 -0 +-0.2 0 4.6 0.48 0.04 0 1 -0 +-0.6 0 4.6 0.44 0.04 0 1 -0 +-0.2 0 5 0.48 0 0 1 -0 +-0.2 0 4.6 0.48 0.04 0 1 -0 +-0.6 0 5 0.44 0 0 1 -0 +-0.2 0 5 0.48 0 0 1 -0 +0.2 0 4.6 0.52 0.04 0 1 -0 +-0.2 0 4.6 0.48 0.04 0 1 -0 +0.2 0 5 0.52 0 0 1 -0 +0.2 0 4.6 0.52 0.04 0 1 -0 +-0.2 0 5 0.48 0 0 1 -0 +0.2 0 5 0.52 0 0 1 -0 +0.6 0 4.6 0.56 0.04 0 1 -0 +0.2 0 4.6 0.52 0.04 0 1 -0 +0.6 0 5 0.56 0 0 1 -0 +0.6 0 4.6 0.56 0.04 0 1 -0 +0.2 0 5 0.52 0 0 1 -0 +0.6 0 5 0.56 0 0 1 -0 +1 0 4.6 0.6 0.04 0 1 -0 +0.6 0 4.6 0.56 0.04 0 1 -0 +1 0 5 0.6 0 0 1 -0 +1 0 4.6 0.6 0.04 0 1 -0 +0.6 0 5 0.56 0 0 1 -0 +1 0 5 0.6 0 0 1 -0 +1.4 0 4.6 0.64 0.04 0 1 -0 +1 0 4.6 0.6 0.04 0 1 -0 +1.4 0 5 0.64 0 0 1 -0 +1.4 0 4.6 0.64 0.04 0 1 -0 +1 0 5 0.6 0 0 1 -0 +1.4 0 5 0.64 0 0 1 -0 +1.8 0 4.6 0.68 0.04 0 1 -0 +1.4 0 4.6 0.64 0.04 0 1 -0 +1.8 0 5 0.68 0 0 1 -0 +1.8 0 4.6 0.68 0.04 0 1 -0 +1.4 0 5 0.64 0 0 1 -0 +1.8 0 5 0.68 0 0 1 -0 +2.2 0 4.6 0.72 0.04 0 1 -0 +1.8 0 4.6 0.68 0.04 0 1 -0 +2.2 0 5 0.72 0 0 1 -0 +2.2 0 4.6 0.72 0.04 0 1 -0 +1.8 0 5 0.68 0 0 1 -0 +2.2 0 5 0.72 0 0 1 -0 +2.6 0 4.6 0.76 0.04 0 1 -0 +2.2 0 4.6 0.72 0.04 0 1 -0 +2.6 0 5 0.76 0 0 1 -0 +2.6 0 4.6 0.76 0.04 0 1 -0 +2.2 0 5 0.72 0 0 1 -0 +2.6 0 5 0.76 0 0 1 -0 +3 0 4.6 0.8 0.04 0 1 -0 +2.6 0 4.6 0.76 0.04 0 1 -0 +3 0 5 0.8 0 0 1 -0 +3 0 4.6 0.8 0.04 0 1 -0 +2.6 0 5 0.76 0 0 1 -0 +3 0 5 0.8 0 0 1 -0 +3.4 0 4.6 0.84 0.04 0 1 -0 +3 0 4.6 0.8 0.04 0 1 -0 +3.4 0 5 0.84 0 0 1 -0 +3.4 0 4.6 0.84 0.04 0 1 -0 +3 0 5 0.8 0 0 1 -0 +3.4 0 5 0.84 0 0 1 -0 +3.8 0 4.6 0.88 0.04 0 1 -0 +3.4 0 4.6 0.84 0.04 0 1 -0 +3.8 0 5 0.88 0 0 1 -0 +3.8 0 4.6 0.88 0.04 0 1 -0 +3.4 0 5 0.84 0 0 1 -0 +3.8 0 5 0.88 0 0 1 -0 +4.2 0 4.6 0.92 0.04 0 1 -0 +3.8 0 4.6 0.88 0.04 0 1 -0 +4.2 0 5 0.92 0 0 1 -0 +4.2 0 4.6 0.92 0.04 0 1 -0 +3.8 0 5 0.88 0 0 1 -0 +4.2 0 5 0.92 0 0 1 -0 +4.6 0 4.6 0.96 0.04 0 1 -0 +4.2 0 4.6 0.92 0.04 0 1 -0 +4.6 0 5 0.96 0 0 1 -0 +4.6 0 4.6 0.96 0.04 0 1 -0 +4.2 0 5 0.92 0 0 1 -0 +4.6 0 5 0.96 0 0 1 -0 +5 0 4.6 1 0.04 0 1 -0 +4.6 0 4.6 0.96 0.04 0 1 -0 +5 0 5 1 0 0 1 -0 +5 0 4.6 1 0.04 0 1 -0 +4.6 0 5 0.96 0 0 1 -0 diff --git a/enginecustom/shader-error.txt b/enginecustom/shader-error.txt new file mode 100644 index 0000000..a0b1877 Binary files /dev/null and b/enginecustom/shader-error.txt differ diff --git a/enginecustom/sphere.mtl b/enginecustom/sphere.mtl deleted file mode 100644 index 6d43325..0000000 --- a/enginecustom/sphere.mtl +++ /dev/null @@ -1,2 +0,0 @@ -# Blender 4.0.1 MTL File: 'None' -# www.blender.org diff --git a/enginecustom/square.txt b/enginecustom/square.txt new file mode 100644 index 0000000..ab9a113 --- /dev/null +++ b/enginecustom/square.txt @@ -0,0 +1,10 @@ +Vertex Count: 6 + +Data: + +-1.0 1.0 0.0 0.0 0.0 0.0 0.0 -1.0 + 1.0 1.0 0.0 1.0 0.0 0.0 0.0 -1.0 +-1.0 -1.0 0.0 0.0 1.0 0.0 0.0 -1.0 +-1.0 -1.0 0.0 0.0 1.0 0.0 0.0 -1.0 + 1.0 1.0 0.0 1.0 0.0 0.0 0.0 -1.0 + 1.0 -1.0 0.0 1.0 1.0 0.0 0.0 -1.0 diff --git a/enginecustom/textclass.cpp b/enginecustom/textclass.cpp new file mode 100644 index 0000000..33df17a --- /dev/null +++ b/enginecustom/textclass.cpp @@ -0,0 +1,250 @@ +#include "textclass.h" + + +TextClass::TextClass() +{ + m_vertexBuffer = 0; + m_indexBuffer = 0; +} + + +TextClass::TextClass(const TextClass& other) +{ +} + + +TextClass::~TextClass() +{ +} + +bool TextClass::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext, int screenWidth, int screenHeight, int maxLength, FontClass* Font, char* text, + int positionX, int positionY, float red, float green, float blue) +{ + bool result; + + + // Store the screen width and height. + m_screenWidth = screenWidth; + m_screenHeight = screenHeight; + + // Store the maximum length of the sentence. + m_maxLength = maxLength; + + // Initalize the sentence. + result = InitializeBuffers(device, deviceContext, Font, text, positionX, positionY, red, green, blue); + if (!result) + { + return false; + } + + return true; +} + +void TextClass::Shutdown() +{ + // Release the vertex and index buffers. + ShutdownBuffers(); + + return; +} + +void TextClass::Render(ID3D11DeviceContext* deviceContext) +{ + // Put the vertex and index buffers on the graphics pipeline to prepare them for drawing. + RenderBuffers(deviceContext); + + return; +} + +int TextClass::GetIndexCount() +{ + return m_indexCount; +} + +bool TextClass::InitializeBuffers(ID3D11Device* device, ID3D11DeviceContext* deviceContext, FontClass* Font, char* text, int positionX, int positionY, float red, float green, float blue) +{ + VertexType* vertices; + unsigned long* indices; + D3D11_BUFFER_DESC vertexBufferDesc, indexBufferDesc; + D3D11_SUBRESOURCE_DATA vertexData, indexData; + HRESULT result; + int i; + + // Set the vertex and index count. + m_vertexCount = 6 * m_maxLength; + m_indexCount = m_vertexCount; + + // Create the vertex array. + vertices = new VertexType[m_vertexCount]; + + // Create the index array. + indices = new unsigned long[m_indexCount]; + + // Initialize vertex array to zeros at first. + memset(vertices, 0, (sizeof(VertexType) * m_vertexCount)); + + // Initialize the index array. + for (i = 0; i < m_indexCount; i++) + { + indices[i] = i; + } + + // Set up the description of the dynamic vertex buffer. + vertexBufferDesc.Usage = D3D11_USAGE_DYNAMIC; + vertexBufferDesc.ByteWidth = sizeof(VertexType) * m_vertexCount; + vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; + vertexBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + vertexBufferDesc.MiscFlags = 0; + vertexBufferDesc.StructureByteStride = 0; + + // Give the subresource structure a pointer to the vertex data. + vertexData.pSysMem = vertices; + vertexData.SysMemPitch = 0; + vertexData.SysMemSlicePitch = 0; + + // Create the vertex buffer. + result = device->CreateBuffer(&vertexBufferDesc, &vertexData, &m_vertexBuffer); + if (FAILED(result)) + { + return false; + } + + // Set up the description of the static index buffer. + indexBufferDesc.Usage = D3D11_USAGE_DEFAULT; + indexBufferDesc.ByteWidth = sizeof(unsigned long) * m_indexCount; + indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; + indexBufferDesc.CPUAccessFlags = 0; + indexBufferDesc.MiscFlags = 0; + indexBufferDesc.StructureByteStride = 0; + + // Give the subresource structure a pointer to the index data. + indexData.pSysMem = indices; + indexData.SysMemPitch = 0; + indexData.SysMemSlicePitch = 0; + + // Create the index buffer. + result = device->CreateBuffer(&indexBufferDesc, &indexData, &m_indexBuffer); + if (FAILED(result)) + { + return false; + } + + // Release the vertex array as it is no longer needed. + delete[] vertices; + vertices = 0; + + // Release the index array as it is no longer needed. + delete[] indices; + indices = 0; + + // Now add the text data to the sentence buffers. + result = UpdateText(deviceContext, Font, text, positionX, positionY, red, green, blue); + if (!result) + { + return false; + } + + return true; +} + +void TextClass::ShutdownBuffers() +{ + // Release the index buffer. + if (m_indexBuffer) + { + m_indexBuffer->Release(); + m_indexBuffer = 0; + } + + // Release the vertex buffer. + if (m_vertexBuffer) + { + m_vertexBuffer->Release(); + m_vertexBuffer = 0; + } + + return; +} + +bool TextClass::UpdateText(ID3D11DeviceContext* deviceContext, FontClass* Font, char* text, int positionX, int positionY, float red, float green, float blue) +{ + int numLetters; + VertexType* vertices; + float drawX, drawY; + HRESULT result; + D3D11_MAPPED_SUBRESOURCE mappedResource; + VertexType* verticesPtr; + + // Store the color of the sentence. + m_pixelColor = XMFLOAT4(red, green, blue, 1.0f); + + // Get the number of letters in the sentence. + numLetters = (int)strlen(text); + + // Check for possible buffer overflow. + if (numLetters > m_maxLength) + { + return false; + } + + // Create the vertex array. + vertices = new VertexType[m_vertexCount]; + + // Initialize vertex array to zeros at first. + memset(vertices, 0, (sizeof(VertexType) * m_vertexCount)); + + // Calculate the X and Y pixel position on the screen to start drawing to. + drawX = (float)(((m_screenWidth / 2) * -1) + positionX); + drawY = (float)((m_screenHeight / 2) - positionY); + + // Use the font class to build the vertex array from the sentence text and sentence draw location. + Font->BuildVertexArray((void*)vertices, text, drawX, drawY); + + // Lock the vertex buffer so it can be written to. + result = deviceContext->Map(m_vertexBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + if (FAILED(result)) + { + return false; + } + + // Get a pointer to the data in the vertex buffer. + verticesPtr = (VertexType*)mappedResource.pData; + + // Copy the data into the vertex buffer. + memcpy(verticesPtr, (void*)vertices, (sizeof(VertexType) * m_vertexCount)); + + // Unlock the vertex buffer. + deviceContext->Unmap(m_vertexBuffer, 0); + + // Release the vertex array as it is no longer needed. + delete[] vertices; + vertices = 0; + + return true; +} + +void TextClass::RenderBuffers(ID3D11DeviceContext* deviceContext) +{ + unsigned int stride, offset; + + + // Set vertex buffer stride and offset. + stride = sizeof(VertexType); + offset = 0; + + // Set the vertex buffer to active in the input assembler so it can be rendered. + deviceContext->IASetVertexBuffers(0, 1, &m_vertexBuffer, &stride, &offset); + + // Set the index buffer to active in the input assembler so it can be rendered. + deviceContext->IASetIndexBuffer(m_indexBuffer, DXGI_FORMAT_R32_UINT, 0); + + // Set the type of primitive that should be rendered from this vertex buffer, in this case triangles. + deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + + return; +} + +XMFLOAT4 TextClass::GetPixelColor() +{ + return m_pixelColor; +} diff --git a/enginecustom/textclass.h b/enginecustom/textclass.h index 6f70f09..c3acffa 100644 --- a/enginecustom/textclass.h +++ b/enginecustom/textclass.h @@ -1 +1,48 @@ -#pragma once +#ifndef _TEXTCLASS_H_ +#define _TEXTCLASS_H_ + + +/////////////////////// +// MY CLASS INCLUDES // +/////////////////////// +#include "fontclass.h" + + +//////////////////////////////////////////////////////////////////////////////// +// Class name: TextClass +//////////////////////////////////////////////////////////////////////////////// +class TextClass +{ +private: + struct VertexType + { + XMFLOAT3 position; + XMFLOAT2 texture; + }; + +public: + TextClass(); + TextClass(const TextClass&); + ~TextClass(); + + bool Initialize(ID3D11Device*, ID3D11DeviceContext*, int, int, int, FontClass*, char*, int, int, float, float, float); + void Shutdown(); + void Render(ID3D11DeviceContext*); + + int GetIndexCount(); + + bool UpdateText(ID3D11DeviceContext*, FontClass*, char*, int, int, float, float, float); + XMFLOAT4 GetPixelColor(); + +private: + bool InitializeBuffers(ID3D11Device*, ID3D11DeviceContext*, FontClass*, char*, int, int, float, float, float); + void ShutdownBuffers(); + void RenderBuffers(ID3D11DeviceContext*); + +private: + ID3D11Buffer* m_vertexBuffer, * m_indexBuffer; + int m_screenWidth, m_screenHeight, m_maxLength, m_vertexCount, m_indexCount; + XMFLOAT4 m_pixelColor; +}; + +#endif