added linear-algebra benchmarks

This commit is contained in:
Marcel Lütke Dreimann
2022-08-22 12:23:33 +02:00
parent 36f0a300a0
commit 861988c1aa
49 changed files with 9462 additions and 9 deletions

View File

@@ -19,7 +19,7 @@
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "CL/cl.h"
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
@@ -28,8 +28,8 @@
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "2mm.h"
#include "polybench.h"
#include "polybenchUtilFuncts.h"
#include "../../polybench.h"
#include "../../polybenchUtilFuncts.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 1.05
@@ -45,6 +45,10 @@
#include "2mm_kernel.h"
namespace ns_2mm {
char str_temp[1024];
cl_platform_id platform_id;
@@ -415,4 +419,6 @@ int main(int argc, char *argv[])
return 0;
}
#include "polybench.cc"
}
// #include "../../polybench.cc"

View File

@@ -0,0 +1,51 @@
/**
* 2mm.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
/* Can switch DATA_TYPE between float and double */
typedef float DATA_TYPE;
__kernel void mm2_kernel1(__global DATA_TYPE *tmp, __global DATA_TYPE *A, __global DATA_TYPE *B, int ni, int nj, int nk, int nl, DATA_TYPE alpha, DATA_TYPE beta)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < ni) && (j < nj))
{
tmp[i * nj + j] = 0;
int k;
for (k = 0; k < nk; k++)
{
tmp[i * nj + j] += alpha * A[i * nk + k] * B[k * nj + j];
}
}
}
__kernel void mm2_kernel2(__global DATA_TYPE *tmp, __global DATA_TYPE *C, __global DATA_TYPE *D, int ni, int nj, int nk, int nl, DATA_TYPE alpha, DATA_TYPE beta)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < ni) && (j < nl))
{
D[i * nl + j] *= beta;
int k;
for (k = 0; k < nj; k++)
{
D[i * nl + j] += tmp[i * nj + k] * C[k * nl + j];
}
}
}

View File

@@ -13,7 +13,7 @@
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define SMALL_DATASET
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */

View File

@@ -0,0 +1,451 @@
/**
* 3mm.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "3mm.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 10.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
#include "3mm_kernel.h"
namespace ns_3mm {
#include "../../polybenchUtilFuncts.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_kernel clKernel3;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
cl_mem c_mem_obj;
cl_mem d_mem_obj;
cl_mem e_mem_obj;
cl_mem f_mem_obj;
cl_mem g_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int ni, int nl, DATA_TYPE POLYBENCH_2D(G, NI, NL, ni, nl), DATA_TYPE POLYBENCH_2D(G_outputFromGpu, NI, NL, ni, nl))
{
int i,j,fail;
fail = 0;
for (i=0; i < ni; i++)
{
for (j=0; j < nl; j++)
{
if (percentDiff(G[i][j], G_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// // Load the kernel source code into the array source_str
// fp = fopen("3mm.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_array(int ni, int nj, int nk, int nl, int nm, DATA_TYPE POLYBENCH_2D(A, NI, NK, ni, nk), DATA_TYPE POLYBENCH_2D(B, NK, NJ, nk, nj),
DATA_TYPE POLYBENCH_2D(C, NJ, NM, nj, nm), DATA_TYPE POLYBENCH_2D(D, NM, NL, nm, nl))
{
int i, j;
for (i = 0; i < ni; i++)
{
for (j = 0; j < nk; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / ni;
}
}
for (i = 0; i < nk; i++)
{
for (j = 0; j < nj; j++)
{
B[i][j] = ((DATA_TYPE) i*(j+1)) / nj;
}
}
for (i = 0; i < nj; i++)
{
for (j = 0; j < nm; j++)
{
C[i][j] = ((DATA_TYPE) i*(j+3)) / nl;
}
}
for (i = 0; i < nm; i++)
{
for (j = 0; j < nl; j++)
{
D[i][j] = ((DATA_TYPE) i*(j+2)) / nk;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A, NI, NJ, ni, nj), DATA_TYPE POLYBENCH_2D(B, NI, NJ, ni, nj), DATA_TYPE POLYBENCH_2D(C, NI, NJ, ni, nj), DATA_TYPE POLYBENCH_2D(D, NI, NJ, ni, nj),
DATA_TYPE POLYBENCH_2D(E, NI, NJ, ni, nj), DATA_TYPE POLYBENCH_2D(F, NI, NJ, ni, nj), DATA_TYPE POLYBENCH_2D(G, NI, NJ, ni, nj))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_ONLY, sizeof(DATA_TYPE) * NI * NK, NULL, &errcode);
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_ONLY, sizeof(DATA_TYPE) * NK * NJ, NULL, &errcode);
c_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NJ * NM, NULL, &errcode);
d_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NM * NL, NULL, &errcode);
e_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NJ, NULL, &errcode);
f_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NJ * NL, NULL, &errcode);
g_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NK, A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NK * NJ, B, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, c_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NJ * NM, C, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, d_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NM * NL, D, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, e_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NJ, E, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, f_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NJ * NL, F, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, g_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NL, G, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = __3mm_Gen9core_gen_len;
const unsigned char* kernel_bin = __3mm_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernels
clKernel1 = clCreateKernel(clProgram, "mm3_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clKernel2 = clCreateKernel(clProgram, "mm3_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clKernel3 = clCreateKernel(clProgram, "mm3_kernel3", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int ni, int nj, int nk, int nl, int nm)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NJ) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NI) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&e_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(int), (void *)&ni);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(int), (void *)&nj);
errcode |= clSetKernelArg(clKernel1, 5, sizeof(int), (void *)&nk);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clEnqueueBarrier(clCommandQue);
globalWorkSize[0] = (size_t)ceil(((float)NL) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NJ) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&c_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&d_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(cl_mem), (void *)&f_mem_obj);
errcode |= clSetKernelArg(clKernel2, 3, sizeof(int), (void *)&nj);
errcode |= clSetKernelArg(clKernel2, 4, sizeof(int), (void *)&nl);
errcode |= clSetKernelArg(clKernel2, 5, sizeof(int), (void *)&nm);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clEnqueueBarrier(clCommandQue);
globalWorkSize[0] = (size_t)ceil(((float)NL) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NI) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
errcode = clSetKernelArg(clKernel3, 0, sizeof(cl_mem), (void *)&e_mem_obj);
errcode |= clSetKernelArg(clKernel3, 1, sizeof(cl_mem), (void *)&f_mem_obj);
errcode |= clSetKernelArg(clKernel3, 2, sizeof(cl_mem), (void *)&g_mem_obj);
errcode |= clSetKernelArg(clKernel3, 3, sizeof(int), (void *)&ni);
errcode |= clSetKernelArg(clKernel3, 4, sizeof(int), (void *)&nl);
errcode |= clSetKernelArg(clKernel3, 5, sizeof(int), (void *)&nj);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel3, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseKernel(clKernel3);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(b_mem_obj);
errcode = clReleaseMemObject(c_mem_obj);
errcode = clReleaseMemObject(d_mem_obj);
errcode = clReleaseMemObject(e_mem_obj);
errcode = clReleaseMemObject(f_mem_obj);
errcode = clReleaseMemObject(g_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
/* Main computational kernel on CPU */
void mm3_cpu(int ni, int nj, int nk, int nl, int nm,
DATA_TYPE POLYBENCH_2D(E,NI,NJ,ni,nj),
DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk),
DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj),
DATA_TYPE POLYBENCH_2D(F,NJ,NL,nj,nl),
DATA_TYPE POLYBENCH_2D(C,NJ,NM,nj,nm),
DATA_TYPE POLYBENCH_2D(D,NM,NL,nm,nl),
DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl))
{
int i, j, k;
/* E := A*B */
for (i = 0; i < _PB_NI; i++)
{
for (j = 0; j < _PB_NJ; j++)
{
E[i][j] = 0;
for (k = 0; k < _PB_NK; ++k)
{
E[i][j] += A[i][k] * B[k][j];
}
}
}
/* F := C*D */
for (i = 0; i < _PB_NJ; i++)
{
for (j = 0; j < _PB_NL; j++)
{
F[i][j] = 0;
for (k = 0; k < _PB_NM; ++k)
{
F[i][j] += C[i][k] * D[k][j];
}
}
}
/* G := E*F */
for (i = 0; i < _PB_NI; i++)
{
for (j = 0; j < _PB_NL; j++)
{
G[i][j] = 0;
for (k = 0; k < _PB_NJ; ++k)
{
G[i][j] += E[i][k] * F[k][j];
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int ni, int nl,
DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl))
{
int i, j;
for (i = 0; i < ni; i++)
for (j = 0; j < nl; j++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, G[i][j]);
if ((i * ni + j) % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
int ni = NI;
int nj = NJ;
int nk = NK;
int nl = NL;
int nm = NM;
/* Variable declaration/allocation. */
POLYBENCH_2D_ARRAY_DECL(E, DATA_TYPE, NI, NJ, ni, nj);
POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, NI, NK, ni, nk);
POLYBENCH_2D_ARRAY_DECL(B, DATA_TYPE, NK, NJ, nk, nj);
POLYBENCH_2D_ARRAY_DECL(F, DATA_TYPE, NJ, NL, nj, nl);
POLYBENCH_2D_ARRAY_DECL(C, DATA_TYPE, NJ, NM, nj, nm);
POLYBENCH_2D_ARRAY_DECL(D, DATA_TYPE, NM, NL, nm, nl);
POLYBENCH_2D_ARRAY_DECL(G, DATA_TYPE, NI, NL, ni, nl);
POLYBENCH_2D_ARRAY_DECL(G_outputFromGpu, DATA_TYPE, NI, NL, ni, nl);
init_array(ni, nj, nk, nl, nm, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(C), POLYBENCH_ARRAY(D));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(C), POLYBENCH_ARRAY(D), POLYBENCH_ARRAY(E), POLYBENCH_ARRAY(F), POLYBENCH_ARRAY(G));
cl_load_prog();
cl_launch_kernel(ni, nj, nk, nl, nm);
errcode = clEnqueueReadBuffer(clCommandQue, g_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NL, POLYBENCH_ARRAY(G_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
mm3_cpu(ni, nj, nk, nl, nm, POLYBENCH_ARRAY(E), POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(F), POLYBENCH_ARRAY(C),
POLYBENCH_ARRAY(D), POLYBENCH_ARRAY(G));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(ni, nl, POLYBENCH_ARRAY(G), POLYBENCH_ARRAY(G_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(G_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(B);
POLYBENCH_FREE_ARRAY(C);
POLYBENCH_FREE_ARRAY(D);
POLYBENCH_FREE_ARRAY(E);
POLYBENCH_FREE_ARRAY(F);
POLYBENCH_FREE_ARRAY(G);
POLYBENCH_FREE_ARRAY(G_outputFromGpu);
return 0;
}
};
//#include "../../polybench.cc"

View File

@@ -0,0 +1,66 @@
/**
* 3mm.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void mm3_kernel1(__global DATA_TYPE *A, __global DATA_TYPE *B, __global DATA_TYPE *E, int ni, int nj, int nk)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < ni) && (j < nj))
{
int k;
E[i*nj + j] = 0;
for(k=0; k < nk; k++)
{
E[i * nj + j] += A[i * nk + k] * B[k * nj + j];
}
}
}
__kernel void mm3_kernel2(__global DATA_TYPE *C, __global DATA_TYPE *D, __global DATA_TYPE *F, int nj, int nl, int nm)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < nj) && (j < nl))
{
int k;
F[i*nl + j] = 0;
for(k=0; k < nm; k++)
{
F[i * nl + j] += C[i * nm + k] * D[k * nl +j];
}
}
}
__kernel void mm3_kernel3(__global DATA_TYPE *E, __global DATA_TYPE *F, __global DATA_TYPE *G, int ni, int nl, int nj)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < ni) && (j < nl))
{
int k;
G[i*nl + j] = 0;
for(k=0; k < nj; k++)
{
G[i * nl + j] += E[i * nj + k] * F[k * nl + j];
}
}
}

View File

@@ -0,0 +1,79 @@
/**
* 3mm.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef THREEMM_H
# define THREEMM_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NI) && !defined(NJ) && !defined(NK) && !defined(NL) && !defined(NM)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
# define NI 128
# define NJ 128
# define NK 128
# define NL 128
# define NM 128
# endif
# ifdef SMALL_DATASET
# define NI 256
# define NJ 256
# define NK 256
# define NL 256
# define NM 256
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
# define NI 512
# define NJ 512
# define NK 512
# define NL 512
# define NM 512
# endif
# ifdef LARGE_DATASET
# define NI 1024
# define NJ 1024
# define NK 1024
# define NL 1024
# define NM 1024
# endif
# ifdef EXTRALARGE_DATASET
# define NI 2048
# define NJ 2048
# define NK 2048
# define NL 2048
# define NM 2048
# endif
# endif /* !N */
# define _PB_NI POLYBENCH_LOOP_BOUND(NI,ni)
# define _PB_NJ POLYBENCH_LOOP_BOUND(NJ,nj)
# define _PB_NK POLYBENCH_LOOP_BOUND(NK,nk)
# define _PB_NL POLYBENCH_LOOP_BOUND(NL,nl)
# define _PB_NM POLYBENCH_LOOP_BOUND(NM,nm)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !THREEMM*/

View File

@@ -0,0 +1,765 @@
unsigned char __3mm_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x04, 0x79, 0xec, 0x42, 0x04, 0x95, 0x9b,
0xc7, 0x93, 0x3f, 0x26, 0x0c, 0x00, 0x00, 0x00, 0x3c, 0x06, 0x00, 0x00,
0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x6d, 0x6d, 0x33, 0x5f,
0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x31, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f,
0x30, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x34, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f,
0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22, 0xc0, 0x01, 0x8d, 0x0a,
0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0c, 0x0a, 0x07,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x76, 0x78, 0x07, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x80, 0x01, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0x20, 0x2d, 0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x40, 0x24, 0xc4, 0x00, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20,
0xc0, 0x0e, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x05, 0x20, 0x80, 0x02,
0x42, 0x12, 0x00, 0x20, 0x40, 0x04, 0xb1, 0x12, 0x20, 0x0d, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0x88, 0x02, 0x00, 0x00,
0x88, 0x02, 0x00, 0x00, 0x41, 0x96, 0x79, 0x20, 0x07, 0x74, 0x76, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x00, 0x02, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x2e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x80, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x74, 0x74, 0x0c, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x10, 0x00, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x20, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20,
0x20, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x65, 0x20, 0x07, 0x74, 0x74, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x2c, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x20, 0x07, 0x00,
0x82, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x40, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x11, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xa0, 0x01, 0x00, 0x00, 0x41, 0x96, 0x01, 0x20, 0x07, 0x70, 0x76, 0x09,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x22, 0x00, 0x02, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0xc0, 0x2d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc4, 0x2f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc8, 0x2f,
0xc4, 0x0f, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x1a, 0x70, 0x7e, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d,
0xc0, 0x02, 0x8d, 0x0a, 0xc4, 0x0f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc4, 0x2f, 0xc4, 0x0f, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x96, 0x19, 0x20, 0xe0, 0x20, 0x7e, 0x0c, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2d, 0xc8, 0x0f, 0x00, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x23, 0x40, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d,
0x80, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x24, 0x00, 0x04, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d, 0x40, 0x0d, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x1a, 0x1a, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d, 0x80, 0x0d, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x40, 0x96, 0x5d, 0x20, 0x07, 0x20, 0x20, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d, 0x40, 0x0d, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23,
0x40, 0x03, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x10, 0x17, 0x17, 0x25,
0x00, 0x00, 0x7e, 0x09, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x2c,
0x00, 0x04, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x23, 0x80, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2c, 0x40, 0x0d, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20,
0xc4, 0x0f, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x5b, 0xe2, 0x06, 0x20,
0x00, 0x70, 0x73, 0xce, 0x5b, 0x83, 0x01, 0x20, 0x00, 0xc0, 0x78, 0xca,
0x33, 0x00, 0x80, 0x0c, 0x70, 0xe0, 0x06, 0x00, 0x82, 0x0e, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x80, 0x01, 0x00,
0x42, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00,
0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e, 0xa8, 0xfe, 0xff, 0xff,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x45, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x69, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6a, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6b, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x95, 0x57, 0x8d, 0x25, 0x42, 0x04, 0x95, 0x9b,
0xc7, 0x93, 0x3f, 0x26, 0x0c, 0x00, 0x00, 0x00, 0x3c, 0x06, 0x00, 0x00,
0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x6d, 0x6d, 0x33, 0x5f,
0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f,
0x30, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x34, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f,
0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22, 0xc0, 0x01, 0x8d, 0x0a,
0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0c, 0x0a, 0x07,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x76, 0x78, 0x07, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x80, 0x01, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0x20, 0x2d, 0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x40, 0x24, 0xc4, 0x00, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20,
0xc0, 0x0e, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x05, 0x20, 0x80, 0x02,
0x42, 0x12, 0x00, 0x20, 0x40, 0x04, 0xb1, 0x12, 0x20, 0x0d, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0x88, 0x02, 0x00, 0x00,
0x88, 0x02, 0x00, 0x00, 0x41, 0x96, 0x79, 0x20, 0x07, 0x74, 0x76, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x00, 0x02, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x2e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x80, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x74, 0x74, 0x0c, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x10, 0x00, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x20, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20,
0x20, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x65, 0x20, 0x07, 0x74, 0x74, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x2c, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x20, 0x07, 0x00,
0x82, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x40, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x11, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xa0, 0x01, 0x00, 0x00, 0x41, 0x96, 0x01, 0x20, 0x07, 0x70, 0x76, 0x09,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x22, 0x00, 0x02, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0xc0, 0x2d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc4, 0x2f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc8, 0x2f,
0xc4, 0x0f, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x1a, 0x70, 0x7e, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d,
0xc0, 0x02, 0x8d, 0x0a, 0xc4, 0x0f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc4, 0x2f, 0xc4, 0x0f, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x96, 0x19, 0x20, 0xe0, 0x20, 0x7e, 0x0c, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2d, 0xc8, 0x0f, 0x00, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x23, 0x40, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d,
0x80, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x24, 0x00, 0x04, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d, 0x40, 0x0d, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x1a, 0x1a, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d, 0x80, 0x0d, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x40, 0x96, 0x5d, 0x20, 0x07, 0x20, 0x20, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d, 0x40, 0x0d, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23,
0x40, 0x03, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x10, 0x17, 0x17, 0x25,
0x00, 0x00, 0x7e, 0x09, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x2c,
0x00, 0x04, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x23, 0x80, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2c, 0x40, 0x0d, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20,
0xc4, 0x0f, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x5b, 0xe2, 0x06, 0x20,
0x00, 0x70, 0x73, 0xce, 0x5b, 0x83, 0x01, 0x20, 0x00, 0xc0, 0x78, 0xca,
0x33, 0x00, 0x80, 0x0c, 0x70, 0xe0, 0x06, 0x00, 0x82, 0x0e, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x80, 0x01, 0x00,
0x42, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00,
0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e, 0xa8, 0xfe, 0xff, 0xff,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x46, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6a, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6c, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6d, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x45, 0x3e, 0xfc, 0xaa, 0x42, 0x04, 0x95, 0x9b,
0xc7, 0x93, 0x3f, 0x26, 0x0c, 0x00, 0x00, 0x00, 0x3c, 0x06, 0x00, 0x00,
0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x6d, 0x6d, 0x33, 0x5f,
0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x33, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f,
0x30, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x34, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f,
0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22, 0xc0, 0x01, 0x8d, 0x0a,
0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0c, 0x0a, 0x07,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x76, 0x78, 0x07, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x80, 0x01, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0x20, 0x2d, 0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x40, 0x24, 0xc4, 0x00, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20,
0xc0, 0x0e, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x05, 0x20, 0x80, 0x02,
0x42, 0x12, 0x00, 0x20, 0x40, 0x04, 0xb1, 0x12, 0x20, 0x0d, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0x88, 0x02, 0x00, 0x00,
0x88, 0x02, 0x00, 0x00, 0x41, 0x96, 0x79, 0x20, 0x07, 0x74, 0x76, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x00, 0x02, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x2e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x80, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x74, 0x74, 0x0c, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x10, 0x00, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x20, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20,
0x20, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x65, 0x20, 0x07, 0x74, 0x74, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x2c, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x20, 0x07, 0x00,
0x82, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x40, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x11, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xa0, 0x01, 0x00, 0x00, 0x41, 0x96, 0x01, 0x20, 0x07, 0x70, 0x76, 0x09,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x22, 0x00, 0x02, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0xc0, 0x2d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc4, 0x2f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc8, 0x2f,
0xc4, 0x0f, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x1a, 0x70, 0x7e, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d,
0xc0, 0x02, 0x8d, 0x0a, 0xc4, 0x0f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc4, 0x2f, 0xc4, 0x0f, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x96, 0x19, 0x20, 0xe0, 0x20, 0x7e, 0x0c, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2d, 0xc8, 0x0f, 0x00, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x23, 0x40, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d,
0x80, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x24, 0x00, 0x04, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d, 0x40, 0x0d, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x1a, 0x1a, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d, 0x80, 0x0d, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x40, 0x96, 0x5d, 0x20, 0x07, 0x20, 0x20, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d, 0x40, 0x0d, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23,
0x40, 0x03, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x10, 0x17, 0x17, 0x25,
0x00, 0x00, 0x7e, 0x09, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x2c,
0x00, 0x04, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x23, 0x80, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2c, 0x40, 0x0d, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20,
0xc4, 0x0f, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x5b, 0xe2, 0x06, 0x20,
0x00, 0x70, 0x73, 0xce, 0x5b, 0x83, 0x01, 0x20, 0x00, 0xc0, 0x78, 0xca,
0x33, 0x00, 0x80, 0x0c, 0x70, 0xe0, 0x06, 0x00, 0x82, 0x0e, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x80, 0x01, 0x00,
0x42, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00,
0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e, 0xa8, 0xfe, 0xff, 0xff,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x69, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6c, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6a, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00
};
unsigned int __3mm_Gen9core_gen_len = 9136;

View File

@@ -0,0 +1,358 @@
/**
* atax.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "atax.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#ifndef M_PI
#define M_PI 3.14159
#endif
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
#include "atax_kernel.h"
namespace ns_atax {
#include "../../polybenchUtilFuncts.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem x_mem_obj;
cl_mem y_mem_obj;
cl_mem tmp_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int ny, DATA_TYPE POLYBENCH_1D(z,NY,ny), DATA_TYPE POLYBENCH_1D(z_outputFromGpu,NY,ny))
{
int i, fail;
fail = 0;
for (i=0; i<ny; i++)
{
if (percentDiff(z[i], z_outputFromGpu[i]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
// print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// // Load the kernel source code into the array source_str
// fp = fopen("atax.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_array(int nx, int ny, DATA_TYPE POLYBENCH_1D(x,NX,nx), DATA_TYPE POLYBENCH_2D(A,NX,NY,nx,ny))
{
int i, j;
for (i = 0; i < nx; i++)
{
x[i] = i * M_PI;
for (j = 0; j < ny; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / NX;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,NX,NY,nx,ny), DATA_TYPE POLYBENCH_1D(x,NY,ny), DATA_TYPE POLYBENCH_1D(y,NY,ny), DATA_TYPE POLYBENCH_1D(tmp,NX,nx))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX * NY, NULL, &errcode);
x_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NY, NULL, &errcode);
y_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NY, NULL, &errcode);
tmp_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX * NY, A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, x_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NY, x, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, y_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NY, y, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, tmp_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX, tmp, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = atax_Gen9core_gen_len;
const unsigned char* kernel_bin = atax_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the 1st OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "atax_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
// Create the 2nd OpenCL kernel
clKernel2 = clCreateKernel(clProgram, "atax_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int nx, int ny)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NX) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&tmp_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(int), (void *)&nx);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(int), (void *)&ny);
if(errcode != CL_SUCCESS) printf("Error in setting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clEnqueueBarrier(clCommandQue);
globalWorkSize[0] = (size_t)ceil(((float)NY) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&y_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(cl_mem), (void *)&tmp_mem_obj);
errcode |= clSetKernelArg(clKernel2, 3, sizeof(int), (void *)&nx);
errcode |= clSetKernelArg(clKernel2, 4, sizeof(int), (void *)&ny);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(x_mem_obj);
errcode = clReleaseMemObject(y_mem_obj);
errcode = clReleaseMemObject(tmp_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void atax_cpu(int nx, int ny, DATA_TYPE POLYBENCH_2D(A,NX,NY,nx,ny), DATA_TYPE POLYBENCH_1D(x,NY,ny), DATA_TYPE POLYBENCH_1D(y,NY,ny),
DATA_TYPE POLYBENCH_1D(tmp,NX,nx))
{
int i,j;
for (i= 0; i < _PB_NY; i++)
{
y[i] = 0;
}
for (i = 0; i < _PB_NX; i++)
{
tmp[i] = 0;
for (j = 0; j < _PB_NY; j++)
{
tmp[i] = tmp[i] + A[i][j] * x[j];
}
for (j = 0; j < _PB_NY; j++)
{
y[j] = y[j] + A[i][j] * tmp[i];
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int nx, DATA_TYPE POLYBENCH_1D(y,NX,nx))
{
int i;
for (i = 0; i < nx; i++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, y[i]);
if (i % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
int nx = NX;
int ny = NY;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NX,NY,nx,ny);
POLYBENCH_1D_ARRAY_DECL(x,DATA_TYPE,NY,ny);
POLYBENCH_1D_ARRAY_DECL(y,DATA_TYPE,NY,ny);
POLYBENCH_1D_ARRAY_DECL(y_outputFromGpu,DATA_TYPE,NY,ny);
POLYBENCH_1D_ARRAY_DECL(tmp,DATA_TYPE,NX,nx);
init_array(nx, ny, POLYBENCH_ARRAY(x), POLYBENCH_ARRAY(A));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(x), POLYBENCH_ARRAY(y), POLYBENCH_ARRAY(tmp));
cl_load_prog();
cl_launch_kernel(nx, ny);
errcode = clEnqueueReadBuffer(clCommandQue, y_mem_obj, CL_TRUE, 0, NY*sizeof(DATA_TYPE), POLYBENCH_ARRAY(y_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
atax_cpu(nx, ny, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(x), POLYBENCH_ARRAY(y), POLYBENCH_ARRAY(tmp));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(ny, POLYBENCH_ARRAY(y), POLYBENCH_ARRAY(y_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(ny, POLYBENCH_ARRAY(y_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(x);
POLYBENCH_FREE_ARRAY(y);
POLYBENCH_FREE_ARRAY(y_outputFromGpu);
POLYBENCH_FREE_ARRAY(tmp);
return 0;
}
}

View File

@@ -0,0 +1,46 @@
/**
* atax.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void atax_kernel1(__global DATA_TYPE *A, __global DATA_TYPE *x, __global DATA_TYPE *tmp, int nx, int ny) {
int i = get_global_id(0);
if (i < nx)
{
int j;
for(j=0; j < ny; j++)
{
tmp[i] += A[i * ny + j] * x[j];
}
}
}
__kernel void atax_kernel2(__global DATA_TYPE *A, __global DATA_TYPE *y, __global DATA_TYPE *tmp, int nx, int ny) {
int j = get_global_id(0);
if (j < ny)
{
int i;
for(i=0; i < nx; i++)
{
y[j] += A[i * ny + j] * tmp[i];
}
}
}

View File

@@ -0,0 +1,61 @@
/**
* atax.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef ATAX_H
# define ATAX_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NX) && !defined(NY)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define NX 1024
#define NY 1024
# endif
# ifdef SMALL_DATASET
#define NX 2048
#define NY 2048
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define NX 4096
#define NY 4096
# endif
# ifdef LARGE_DATASET
#define NX 8192
#define NY 8192
# endif
# ifdef EXTRALARGE_DATASET
#define NX 16384
#define NY 16384
# endif
# endif /* !N */
# define _PB_NX POLYBENCH_LOOP_BOUND(NX,nx)
# define _PB_NY POLYBENCH_LOOP_BOUND(NY,ny)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !ATAX*/

View File

@@ -0,0 +1,434 @@
unsigned char atax_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0xcc, 0x1d, 0x53, 0x51, 0x8d, 0x3d, 0x0f,
0x7e, 0xfe, 0x63, 0xb6, 0x10, 0x00, 0x00, 0x00, 0xa4, 0x05, 0x00, 0x00,
0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0x98, 0x02, 0x00, 0x00, 0x61, 0x74, 0x61, 0x78,
0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x31, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x2f, 0x28, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x80, 0x03,
0x26, 0x0a, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0xa0, 0x22, 0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0a, 0x04, 0x07,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x40, 0x01, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x4a, 0x12, 0x20, 0x2e, 0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x05, 0x20, 0x80, 0x02, 0x42, 0x12, 0x00, 0x20, 0x20, 0x0e, 0xb1, 0x12,
0xa0, 0x02, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20,
0x88, 0x01, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x21, 0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2e, 0x40, 0x0f, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x41, 0x96, 0x79, 0x20, 0x07, 0x0c, 0x0a, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f, 0x40, 0x0f, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x0e, 0x0e, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2e, 0xc0, 0x0e, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x00, 0x22, 0xc0, 0x01, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x2e, 0xc0, 0x0e, 0x00, 0x06,
0x02, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x01, 0x20, 0x07, 0x72, 0x0c, 0x06,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x00, 0x0f, 0x8d, 0x0a,
0xc0, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x21,
0xc0, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0xc0, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x40, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x31, 0x00, 0x00, 0x0a,
0x0c, 0x02, 0x80, 0x22, 0x00, 0x01, 0x00, 0x06, 0x01, 0x08, 0x11, 0x02,
0x10, 0x17, 0x7b, 0x25, 0x00, 0x00, 0x06, 0x08, 0x40, 0x96, 0x01, 0x20,
0x07, 0x72, 0x72, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x40, 0x02, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05,
0x24, 0x0a, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x2d, 0x40, 0x0e, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2d,
0x40, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x5b, 0x02, 0x01, 0x20,
0x02, 0x80, 0xbc, 0x29, 0x5b, 0x43, 0x07, 0x20, 0x02, 0xa0, 0xb7, 0x29,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x00, 0x01, 0x00, 0xc2, 0x01, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x40, 0x07, 0x00,
0xc2, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00,
0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e, 0x08, 0xff, 0xff, 0xff,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x74, 0x6d, 0x70, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x78, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x79, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0xfd, 0x8e, 0xdb, 0x2d, 0x51, 0x8d, 0x3d, 0x0f,
0x7e, 0xfe, 0x63, 0xb6, 0x10, 0x00, 0x00, 0x00, 0xa4, 0x05, 0x00, 0x00,
0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x61, 0x74, 0x61, 0x78,
0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x2f, 0x28, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc8, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x80, 0x03,
0x26, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0x60, 0x22, 0xc8, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0a, 0x04, 0x07,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x40, 0x01, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x4a, 0x12, 0x60, 0x2e, 0xc8, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x05, 0x20, 0x80, 0x02, 0x42, 0x12, 0x00, 0x20, 0x60, 0x0e, 0xb1, 0x12,
0x60, 0x02, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20,
0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x21, 0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f, 0x40, 0x0f, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x0c, 0x0c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x00, 0x0f, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x21, 0x80, 0x01, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x2e, 0x00, 0x0f, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f,
0xc0, 0x00, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x00, 0x21, 0xc0, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0xc0, 0x00, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x15, 0x20, 0xe0, 0x10, 0x7e, 0x0a,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0xc4, 0x0f, 0x00, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0x40, 0x22,
0x00, 0x01, 0x00, 0x06, 0x02, 0x08, 0x11, 0x02, 0x10, 0x17, 0x77, 0x25,
0x00, 0x00, 0x06, 0x08, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0x00, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x10, 0x10, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2e,
0x00, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xe0, 0x2d, 0x80, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x5b, 0xe2, 0x00, 0x20, 0x02, 0x70, 0xc4, 0x25, 0x5b, 0x63, 0x07, 0x20,
0x02, 0xb0, 0xbf, 0x25, 0x33, 0x00, 0x80, 0x0c, 0x70, 0xe0, 0x00, 0x00,
0x82, 0x01, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x60, 0x07, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xf8, 0xfe, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x74, 0x6d, 0x70, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x78, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x79, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00
};
unsigned int atax_Gen9core_gen_len = 5164;

View File

@@ -0,0 +1,42 @@
namespace ns_2mm{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_3mm{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_atax{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_bicg{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_doitgen{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_gemm{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_gemver{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_gesummv{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_mvt{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_syr2k{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_syrk{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);

View File

@@ -0,0 +1,388 @@
/**
* bicg.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "bicg.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#ifndef M_PI
#define M_PI 3.14159
#endif
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_bicg {
#include "../../polybenchUtilFuncts.h"
#include "bicg_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem r_mem_obj;
cl_mem p_mem_obj;
cl_mem q_mem_obj;
cl_mem s_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int nx, int ny, DATA_TYPE POLYBENCH_1D(s,NY,ny), DATA_TYPE POLYBENCH_1D(s_outputFromGpu,NY,ny),
DATA_TYPE POLYBENCH_1D(q,NX,nx), DATA_TYPE POLYBENCH_1D(q_outputFromGpu,NX,nx))
{
int i,fail;
fail = 0;
// Compare s with s_cuda
for (i=0; i<nx; i++)
{
if (percentDiff(q[i], q_outputFromGpu[i]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
for (i=0; i<ny; i++)
{
if (percentDiff(s[i], s_outputFromGpu[i]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
// print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// // Load the kernel source code into the array source_str
// fp = fopen("bicg.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_array(int nx, int ny, DATA_TYPE POLYBENCH_2D(A,NX,NY,nx,ny), DATA_TYPE POLYBENCH_1D(p,NY,ny), DATA_TYPE POLYBENCH_1D(r,NX,nx))
{
int i, j;
for (i = 0; i < ny; i++)
{
p[i] = i * M_PI;
}
for (i = 0; i < nx; i++)
{
r[i] = i * M_PI;
for (j = 0; j < ny; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / NX;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,NX,NY,nx,ny), DATA_TYPE POLYBENCH_1D(r,NX,nx), DATA_TYPE POLYBENCH_1D(s,NX,nx),
DATA_TYPE POLYBENCH_1D(p,NX,nx), DATA_TYPE POLYBENCH_1D(q,NX,nx))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX * NY, NULL, &errcode);
r_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX, NULL, &errcode);
s_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX, NULL, &errcode);
p_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX, NULL, &errcode);
q_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX * NY, A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, r_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX, r, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, s_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX, s, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, p_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX, p, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, q_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX, q, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = bicg_Gen9core_gen_len;
const unsigned char* kernel_bin = bicg_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the 1st OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "bicgKernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
// Create the 2nd OpenCL kernel
clKernel2 = clCreateKernel(clProgram, "bicgKernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int nx, int ny)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NX) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&p_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&q_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(int), &nx);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(int), &ny);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the 1st OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
globalWorkSize[0] = (size_t)ceil(((float)NY) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&r_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(cl_mem), (void *)&s_mem_obj);
errcode |= clSetKernelArg(clKernel2, 3, sizeof(int), &nx);
errcode |= clSetKernelArg(clKernel2, 4, sizeof(int), &ny);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the 2nd OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(p_mem_obj);
errcode = clReleaseMemObject(q_mem_obj);
errcode = clReleaseMemObject(r_mem_obj);
errcode = clReleaseMemObject(s_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void bicg_cpu(int nx, int ny, DATA_TYPE POLYBENCH_2D(A,NX,NY,nx,ny), DATA_TYPE POLYBENCH_1D(r,NX,nx), DATA_TYPE POLYBENCH_1D(s,NY,ny),
DATA_TYPE POLYBENCH_1D(p,NY,ny), DATA_TYPE POLYBENCH_1D(q,NX,nx))
{
int i,j;
for (i = 0; i < _PB_NY; i++)
{
s[i] = 0.0;
}
for (i = 0; i < _PB_NX; i++)
{
q[i] = 0.0;
for (j = 0; j < _PB_NY; j++)
{
s[j] = s[j] + r[i] * A[i][j];
q[i] = q[i] + A[i][j] * p[j];
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int nx, int ny,
DATA_TYPE POLYBENCH_1D(s,NY,ny),
DATA_TYPE POLYBENCH_1D(q,NX,nx))
{
int i;
for (i = 0; i < ny; i++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, s[i]);
if (i % 20 == 0) fprintf (stderr, "\n");
}
for (i = 0; i < nx; i++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, q[i]);
if (i % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
int nx = NX;
int ny = NY;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NX,NY,nx,ny);
POLYBENCH_1D_ARRAY_DECL(s,DATA_TYPE,NY,ny);
POLYBENCH_1D_ARRAY_DECL(q,DATA_TYPE,NX,nx);
POLYBENCH_1D_ARRAY_DECL(p,DATA_TYPE,NY,ny);
POLYBENCH_1D_ARRAY_DECL(r,DATA_TYPE,NX,nx);
POLYBENCH_1D_ARRAY_DECL(s_outputFromGpu,DATA_TYPE,NY,ny);
POLYBENCH_1D_ARRAY_DECL(q_outputFromGpu,DATA_TYPE,NX,nx);
init_array(nx, ny, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(p), POLYBENCH_ARRAY(r));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(r), POLYBENCH_ARRAY(s), POLYBENCH_ARRAY(p), POLYBENCH_ARRAY(q));
cl_load_prog();
cl_launch_kernel(nx, ny);
errcode = clEnqueueReadBuffer(clCommandQue, s_mem_obj, CL_TRUE, 0, NY*sizeof(DATA_TYPE), POLYBENCH_ARRAY(s_outputFromGpu), 0, NULL, NULL);
errcode = clEnqueueReadBuffer(clCommandQue, q_mem_obj, CL_TRUE, 0, NX*sizeof(DATA_TYPE), POLYBENCH_ARRAY(q_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
bicg_cpu(nx, ny, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(r), POLYBENCH_ARRAY(s), POLYBENCH_ARRAY(p), POLYBENCH_ARRAY(q));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(nx, ny, POLYBENCH_ARRAY(s), POLYBENCH_ARRAY(s_outputFromGpu), POLYBENCH_ARRAY(q),
POLYBENCH_ARRAY(q_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(nx, ny, POLYBENCH_ARRAY(s_outputFromGpu), POLYBENCH_ARRAY(q_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(r);
POLYBENCH_FREE_ARRAY(s);
POLYBENCH_FREE_ARRAY(p);
POLYBENCH_FREE_ARRAY(q);
POLYBENCH_FREE_ARRAY(s_outputFromGpu);
POLYBENCH_FREE_ARRAY(q_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,54 @@
/**
* bicg.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void bicgKernel1(__global DATA_TYPE *A, __global DATA_TYPE *p, __global DATA_TYPE *q, int nx, int ny)
{
int i = get_global_id(0);
if (i < nx)
{
q[i] = 0.0;
int j;
for(j=0; j < ny; j++)
{
q[i] += A[i * ny + j] * p[j];
}
}
}
__kernel void bicgKernel2(__global DATA_TYPE *A, __global DATA_TYPE *r, __global DATA_TYPE *s, int nx, int ny)
{
int j = get_global_id(0);
if (j < ny)
{
s[j] = 0.0;
int i;
for(i = 0; i < nx; i++)
{
s[j] += A[i * ny + j] * r[i];
}
}
}

View File

@@ -0,0 +1,61 @@
/**
* bicg.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef BICG_H
# define BICG_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NX) && !defined(NY)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define NX 1024
#define NY 1024
# endif
# ifdef SMALL_DATASET
#define NX 2048
#define NY 2048
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define NX 4096
#define NY 4096
# endif
# ifdef LARGE_DATASET
#define NX 8192
#define NY 8192
# endif
# ifdef EXTRALARGE_DATASET
#define NX 16384
#define NY 16384
# endif
# endif /* !N */
# define _PB_NX POLYBENCH_LOOP_BOUND(NX,nx)
# define _PB_NY POLYBENCH_LOOP_BOUND(NY,ny)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 256
#define DIM_LOCAL_WORK_GROUP_Y 1
#endif /* !BICG*/

View File

@@ -0,0 +1,433 @@
unsigned char bicg_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xab, 0xf4, 0x19, 0x80, 0xf5, 0x35, 0x8c, 0x1e,
0x8e, 0x5a, 0x1c, 0xc9, 0x0c, 0x00, 0x00, 0x00, 0xa4, 0x05, 0x00, 0x00,
0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x00, 0x62, 0x69, 0x63, 0x67,
0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x31, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f,
0x28, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x20, 0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0a, 0x04, 0x07,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x10, 0x16, 0x77, 0x25, 0x07, 0x00, 0x0a, 0x08,
0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0xf8, 0x01, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x21, 0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f, 0x40, 0x0f, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0xc0, 0x21,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0xc0, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x0c, 0x0c, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x2f, 0x00, 0x0f, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00,
0x10, 0x00, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20,
0x1c, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0xe0, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x07, 0x00, 0x02, 0x0f, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x11, 0x00, 0x06, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x40, 0x01, 0x00, 0x00, 0x41, 0x96, 0x79, 0x20,
0x07, 0x10, 0x0a, 0x08, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e,
0x40, 0x0f, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x40, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x2e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x70, 0x10, 0x06, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22,
0x80, 0x0e, 0x8d, 0x0a, 0xc0, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x00, 0x21, 0xc0, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0xc0, 0x00, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2e,
0x00, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0x80, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0xc0, 0x22, 0x00, 0x01, 0x00, 0x06,
0x01, 0x08, 0x11, 0x02, 0x10, 0x17, 0x7b, 0x25, 0x00, 0x00, 0x06, 0x08,
0x40, 0x96, 0x01, 0x20, 0x07, 0x70, 0x70, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0x80, 0x02, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2d,
0x00, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x60, 0x2d, 0x80, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x5b, 0x22, 0x01, 0x20, 0x02, 0x90, 0xb4, 0x2d, 0x5b, 0x23, 0x07, 0x20,
0x02, 0x90, 0xaf, 0x2d, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x20, 0x01, 0x00,
0x82, 0x01, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x20, 0x07, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0x08, 0xff, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x70, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x78, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x79, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0xf0, 0xf0, 0xfc, 0x47, 0xf5, 0x35, 0x8c, 0x1e, 0x8e, 0x5a, 0x1c, 0xc9,
0x0c, 0x00, 0x00, 0x00, 0xa4, 0x05, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00,
0x98, 0x02, 0x00, 0x00, 0x62, 0x69, 0x63, 0x67, 0x4b, 0x65, 0x72, 0x6e,
0x65, 0x6c, 0x32, 0x00, 0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00,
0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f, 0x28, 0x01, 0x00, 0x0a,
0x64, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x0a, 0x04, 0x07, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x10, 0x16, 0x7b, 0x25, 0x07, 0x00, 0x0a, 0x08, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20, 0xf0, 0x01, 0x00, 0x00,
0xf0, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21,
0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x2f, 0x40, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0xc0, 0x21, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0xc0, 0x2e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x0c, 0x0c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x00, 0x0f, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x03,
0x26, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0xe0, 0x00, 0x00,
0x82, 0x01, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x60, 0x07, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x11, 0x00, 0x06, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0x38, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x00, 0x22,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x80, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f,
0xc0, 0x00, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x00, 0x21, 0xc0, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0xc0, 0x00, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x15, 0x20, 0xe0, 0x12, 0x7e, 0x0a,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0xc4, 0x0f, 0x00, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0x80, 0x22,
0x00, 0x01, 0x00, 0x06, 0x01, 0x08, 0x11, 0x02, 0x10, 0x17, 0x77, 0x25,
0x00, 0x00, 0x06, 0x08, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x40, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x12, 0x12, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x2d,
0x40, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xa0, 0x2d, 0x40, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x5b, 0x02, 0x01, 0x20, 0x02, 0x80, 0xbc, 0x29, 0x5b, 0x43, 0x07, 0x20,
0x02, 0xa0, 0xb7, 0x29, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x00, 0x01, 0x00,
0x82, 0x01, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x40, 0x07, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xf8, 0xfe, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x78, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x79, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int bicg_Gen9core_gen_len = 5156;

View File

@@ -0,0 +1,400 @@
/**
* doitgen.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <unistd.h>
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
#define POLYBENCH_TIME 1
#include "doitgen.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define GPU_DEVICE 0
#define RUN_ON_CPU
#define MAX_SOURCE_SIZE (0x100000)
namespace ns_doitgen {
#include "../../polybenchUtilFuncts.h"
#include "doitgen_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
cl_mem c_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
/* Main computational kernel. The whole function will be timed,
including the call and return. */
void kernel_doitgenCpu(int nr, int nq, int np,
DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np),
DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np),
DATA_TYPE POLYBENCH_3D(sum,NR,NQ,NP,nr,nq,np))
{
int r, q, p, s;
for (r = 0; r < _PB_NR; r++)
{
for (q = 0; q < _PB_NQ; q++)
{
for (p = 0; p < _PB_NP; p++)
{
sum[r][q][p] = 0;
for (s = 0; s < _PB_NP; s++)
sum[r][q][p] = sum[r][q][p] + A[r][q][s] * C4[s][p];
}
for (p = 0; p < _PB_NR; p++)
A[r][q][p] = sum[r][q][p];
}
}
}
/* Array initialization. */
void init_array(int nr, int nq, int np,
DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np),
DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np))
{
int i, j, k;
for (i = 0; i < nr; i++)
for (j = 0; j < nq; j++)
for (k = 0; k < np; k++)
A[i][j][k] = ((DATA_TYPE) i*j + k) / np;
for (i = 0; i < np; i++)
for (j = 0; j < np; j++)
C4[i][j] = ((DATA_TYPE) i*j) / np;
}
void compareResults(int nr, int nq, int np, DATA_TYPE POLYBENCH_3D(sum,NR,NQ,NP,nr,nq,np),
DATA_TYPE POLYBENCH_3D(sum_outputFromGpu,NR,NQ,NP,nr,nq,np))
{
int fail = 0;
int r, q, p;
for (r = 0; r < nr; r++)
{
for (q = 0; q < nq; q++)
{
for (p = 0; p < np; p++)
{
if (percentDiff(sum[r][q][p], sum_outputFromGpu[r][q][p]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
}
// Print results
printf("Number of misses: %d\n", fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("doitgen.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
errcode = clGetDeviceIDs( platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("device id is %d\n",device_id);
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np),
DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np),
DATA_TYPE POLYBENCH_3D(sum,NR,NQ,NP,nr,nq,np))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, NR * NQ * NP * sizeof(DATA_TYPE), NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, NP * NP * sizeof(DATA_TYPE), NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
c_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, NR * NQ * NP * sizeof(DATA_TYPE), NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, NR * NQ * NP * sizeof(DATA_TYPE), A, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, NP * NP * sizeof(DATA_TYPE), C4, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, c_mem_obj, CL_TRUE, 0, NR * NQ * NP * sizeof(DATA_TYPE), sum, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = doitgen_Gen9core_gen_len;
const unsigned char* kernel_bin = doitgen_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "doitgen_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clKernel2 = clCreateKernel(clProgram, "doitgen_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel2\n");
clFinish(clCommandQue);
}
void cl_launch_kernel1(int nr, int nq, int np, int r)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NP) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NQ) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(int), (void *)&nr);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(int), (void *)&nq);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(int), (void *)&np);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel1, 5, sizeof(cl_mem), (void *)&c_mem_obj);
errcode |= clSetKernelArg(clKernel1, 6, sizeof(int), (void *)&r);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel2(int nr, int nq, int np, int r)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NP) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NQ) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(int), (void *)&nr);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(int), (void *)&nq);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(int), (void *)&np);
errcode |= clSetKernelArg(clKernel2, 3, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel2, 4, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel2, 5, sizeof(cl_mem), (void *)&c_mem_obj);
errcode |= clSetKernelArg(clKernel2, 6, sizeof(int), (void *)&r);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(b_mem_obj);
errcode = clReleaseMemObject(c_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int nr, int nq, int np,
DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np))
{
int i, j, k;
for (i = 0; i < nr; i++)
{
for (j = 0; j < nq; j++)
{
for (k = 0; k < np; k++)
{
fprintf (stderr, DATA_PRINTF_MODIFIER, A[i][j][k]);
if (i % 20 == 0) fprintf (stderr, "\n");
}
}
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
/* Retrieve problem size. */
int nr = NR;
int nq = NQ;
int np = NP;
/* Variable declaration/allocation. */
POLYBENCH_3D_ARRAY_DECL(A,DATA_TYPE,NR,NQ,NP,nr,nq,np);
POLYBENCH_3D_ARRAY_DECL(sum,DATA_TYPE,NR,NQ,NP,nr,nq,np);
POLYBENCH_3D_ARRAY_DECL(sum_outputFromGpu,DATA_TYPE,NR,NQ,NP,nr,nq,np);
POLYBENCH_2D_ARRAY_DECL(C4,DATA_TYPE,NP,NP,np,np);
/* Initialize array(s). */
init_array (nr, nq, np,
POLYBENCH_ARRAY(A),
POLYBENCH_ARRAY(C4));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(C4), POLYBENCH_ARRAY(sum));
cl_load_prog();
/* Start timer. */
polybench_start_instruments;
int r;
for (r = 0; r < NR; r++)
{
cl_launch_kernel1(nr, nq, np, r);
cl_launch_kernel2(nr, nq, np, r);
}
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
errcode = clEnqueueReadBuffer(clCommandQue, c_mem_obj, CL_TRUE, 0, NR * NQ * NP * sizeof(DATA_TYPE), sum_outputFromGpu, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
/* Run kernel on CPU */
kernel_doitgenCpu(nr, nq, np,
POLYBENCH_ARRAY(A),
POLYBENCH_ARRAY(C4),
POLYBENCH_ARRAY(sum));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(nr, nq, np, POLYBENCH_ARRAY(sum), POLYBENCH_ARRAY(sum_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(nr, nq, np, POLYBENCH_ARRAY(sum_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
/* Garbage collection */
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(sum);
POLYBENCH_FREE_ARRAY(sum_outputFromGpu);
POLYBENCH_FREE_ARRAY(C4);
return 0;
}
}

View File

@@ -0,0 +1,46 @@
/**
* doitgen.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
/* Can switch DATA_TYPE between float and double */
typedef float DATA_TYPE;
__kernel void doitgen_kernel1(int nr, int nq, int np, __global DATA_TYPE *A, __global DATA_TYPE *C4, __global DATA_TYPE *sum, int r)
{
int p = get_global_id(0);
int q = get_global_id(1);
if ((p < np) && (q < nq))
{
sum[r * (nq * np) + q * np + p] = (DATA_TYPE)0.0;
for (int s = 0; s < np; s++)
{
sum[r * (nq * np) + q * np + p] = sum[r * (nq * np) + q * np + p] + A[r * (nq * np) + q * np + s] * C4[s * np + p];
}
}
}
__kernel void doitgen_kernel2(int nr, int nq, int np, __global DATA_TYPE *A, __global DATA_TYPE *C4, __global DATA_TYPE *sum, int r)
{
int p = get_global_id(0);
int q = get_global_id(1);
if ((p < np) && (q < nq))
{
A[r * (nq * np) + q * np + p] = sum[r * (nq * np) + q * np + p];
}
}

View File

@@ -0,0 +1,66 @@
/**
* doitgen.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef DOITGEN_H
# define DOITGEN_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NQ) && !defined(NR) && !defined(NP)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
# define NQ 32
# define NR 32
# define NP 32
# endif
# ifdef SMALL_DATASET
# define NQ 64
# define NR 64
# define NP 64
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
# define NQ 128
# define NR 128
# define NP 128
# endif
# ifdef LARGE_DATASET
# define NQ 256
# define NR 256
# define NP 256
# endif
# ifdef EXTRALARGE_DATASET
# define NQ 512
# define NR 512
# define NP 512
# endif
# endif /* !N */
# define _PB_NQ POLYBENCH_LOOP_BOUND(NQ,nq)
# define _PB_NR POLYBENCH_LOOP_BOUND(NR,nr)
# define _PB_NP POLYBENCH_LOOP_BOUND(NP,np)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Workgroud dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !DOITGEN */

View File

@@ -0,0 +1,496 @@
unsigned char doitgen_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x57, 0x3b, 0xf1, 0x5a, 0xd9, 0x95, 0x5f, 0x0b,
0xa2, 0x29, 0x76, 0xff, 0x10, 0x00, 0x00, 0x00, 0xac, 0x06, 0x00, 0x00,
0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x64, 0x6f, 0x69, 0x74,
0x67, 0x65, 0x6e, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x31, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x2f, 0x34, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0x38, 0x01, 0x00, 0x0a,
0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc8, 0x20,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x00, 0x00, 0x12,
0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x21, 0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0xc0, 0x01, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x76, 0x78, 0x07, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0c, 0x0a, 0x07,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0x00, 0x02, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05,
0x22, 0x0a, 0x00, 0x20, 0xc0, 0x0e, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x80, 0x24, 0xc8, 0x00, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0xe0, 0x2c,
0xc8, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x80, 0x01, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x05, 0x20, 0x80, 0x02, 0x42, 0x12, 0x00, 0x20, 0x80, 0x04, 0xb1, 0x12,
0xe0, 0x0c, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20,
0xa0, 0x02, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc4, 0x2f, 0x1c, 0x01, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x41, 0x96, 0x01, 0x20, 0x07, 0x74, 0x76, 0x09, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x00, 0x02, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0xc0, 0x2d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x80, 0x41, 0x20, 0x00, 0x06, 0x7e, 0x09,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20,
0x20, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03,
0x24, 0x0a, 0x00, 0x20, 0x20, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x15, 0x20, 0xe0, 0x72, 0x06, 0x74, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0xc4, 0x00, 0x00, 0x0a, 0x40, 0x02, 0x8d, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x70, 0x72, 0x0c, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x22, 0x80, 0x02, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2e, 0x00, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x22,
0xc0, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x6d, 0x20,
0x07, 0x70, 0x70, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x22,
0xc0, 0x02, 0x8d, 0x0a, 0x30, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0xe0, 0x06, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x80, 0x01, 0x00, 0xc2, 0x02, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x11, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x88, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x80, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x23, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc8, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xcc, 0x2f, 0xc8, 0x0f, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x40, 0x96, 0x5d, 0x20, 0x07, 0x1c, 0x72, 0x7e, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2d, 0x80, 0x02, 0x8d, 0x0a, 0xc8, 0x0f, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc8, 0x2f, 0xc8, 0x0f, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x1d, 0x20, 0xe0, 0x22, 0x7e, 0x0c,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2d, 0xcc, 0x0f, 0x00, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23,
0x80, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2d, 0x40, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x24, 0x40, 0x04, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2d,
0x00, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x5d, 0x20,
0x07, 0x1c, 0x1c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d,
0x40, 0x0d, 0x8d, 0x0a, 0x28, 0x01, 0x00, 0x00, 0x40, 0x96, 0x65, 0x20,
0x07, 0x22, 0x22, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2d,
0x00, 0x0d, 0x8d, 0x0a, 0x2c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x23, 0x80, 0x03, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x10, 0x17, 0x1b, 0x25, 0x00, 0x00, 0x7e, 0x09, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xa0, 0x2c, 0x40, 0x04, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x24, 0x40, 0x0d, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x2c,
0x00, 0x0d, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x10, 0x20, 0x80, 0x05,
0x24, 0x0a, 0x00, 0x20, 0xc8, 0x0f, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x5b, 0xc2, 0x06, 0x20, 0x00, 0x60, 0x7b, 0xca, 0x5b, 0xa3, 0x01, 0x20,
0x00, 0xd0, 0x80, 0xc6, 0x33, 0x00, 0x80, 0x0c, 0x70, 0xc0, 0x06, 0x00,
0x02, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0xa0, 0x01, 0x00, 0xc2, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xa8, 0xfe, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x72, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x71, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x70, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x43, 0x34, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x73, 0x75, 0x6d, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0xee, 0x2f, 0x66, 0x67, 0xd9, 0x95, 0x5f, 0x0b, 0xa2, 0x29, 0x76, 0xff,
0x10, 0x00, 0x00, 0x00, 0x84, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00,
0x50, 0x02, 0x00, 0x00, 0x64, 0x6f, 0x69, 0x74, 0x67, 0x65, 0x6e, 0x5f,
0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20,
0x30, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc4, 0x20, 0x34, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xd0, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21,
0xc0, 0x00, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0xc4, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0xc4, 0x00, 0x00, 0x12,
0x60, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0xc0, 0x00, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x22, 0x80, 0x01, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x23, 0x80, 0x02, 0x8d, 0x0a,
0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x16, 0x12, 0x07,
0x40, 0x96, 0x01, 0x20, 0x07, 0x0e, 0x0a, 0x07, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x00, 0x03, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x10, 0x16, 0x7b, 0x25, 0x07, 0x00, 0x16, 0x08,
0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0xc0, 0x24, 0xd0, 0x00, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0xe0, 0x24,
0xd0, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x19, 0x03, 0x25,
0x07, 0x00, 0x0e, 0x09, 0x05, 0x20, 0x80, 0x02, 0x40, 0x12, 0x00, 0x20,
0xc0, 0x04, 0xb1, 0x12, 0xe0, 0x04, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00,
0x00, 0x0e, 0x00, 0x20, 0x08, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc8, 0x20, 0x1c, 0x01, 0x00, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x41, 0x96, 0x01, 0x20, 0x07, 0x1a, 0x16, 0x09,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x00, 0x03, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xcc, 0x20,
0xc8, 0x00, 0x00, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x40, 0x96, 0x1d, 0x20,
0xe0, 0x1a, 0x06, 0x1a, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23,
0xcc, 0x00, 0x00, 0x0a, 0x80, 0x03, 0x8d, 0x00, 0x40, 0x96, 0x01, 0x20,
0xe7, 0x1a, 0x1a, 0x0e, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23,
0x80, 0x03, 0x8d, 0x0a, 0x00, 0x02, 0x8d, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x23, 0x40, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x65, 0x20, 0x07, 0x1e, 0x1a, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x24, 0x80, 0x03, 0x8d, 0x0a,
0x2c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x5d, 0x20, 0x07, 0x1a, 0x1a, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x24,
0xc0, 0x03, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x80, 0x24, 0x00, 0x04, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x20, 0x02, 0x00, 0x42, 0x03, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x40, 0x02, 0x00,
0x82, 0x03, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x72, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x71, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x70, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x43, 0x34, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x73, 0x75, 0x6d, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00
};
unsigned int doitgen_Gen9core_gen_len = 5908;

View File

@@ -0,0 +1,356 @@
/**
* gemm.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "gemm.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_gemm
{
#include "../../polybenchUtilFuncts.h"
#include "gemm_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
cl_mem c_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int ni, int nj, DATA_TYPE POLYBENCH_2D(C,NI,NJ,ni,nj), DATA_TYPE POLYBENCH_2D(C_outputFromGpu,NI,NJ,ni,nj))
{
int i, j, fail;
fail = 0;
// Compare CPU and GPU outputs
for (i=0; i < ni; i++)
{
for (j=0; j < nj; j++)
{
if (percentDiff(C[i][j], C_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("gemm.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init(int ni, int nj, int nk, DATA_TYPE* alpha, DATA_TYPE* beta, DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk),
DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), DATA_TYPE POLYBENCH_2D(C,NI,NJ,ni,nj))
{
int i, j;
*alpha = 32412;
*beta = 2123;
for (i = 0; i < ni; i++)
{
for (j = 0; j < nk; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / NI;
}
}
for (i = 0; i < nk; i++)
{
for (j = 0; j < nj; j++)
{
B[i][j] = ((DATA_TYPE) i*j) / NI;
}
}
for (i = 0; i < ni; i++)
{
for (j = 0; j < nj; j++)
{
C[i][j] = ((DATA_TYPE) i*j) / NI;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), DATA_TYPE POLYBENCH_2D(C,NI,NJ,ni,nj))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NK, NULL, &errcode);
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NK * NJ, NULL, &errcode);
c_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NJ, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NK, A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NK * NJ, B, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, c_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NJ, C, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = gemm_Gen9core_gen_len;
const unsigned char* kernel_bin = gemm_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel = clCreateKernel(clProgram, "gemm", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int ni, int nj, int nk, DATA_TYPE alpha, DATA_TYPE beta)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NJ) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NI) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel, 2, sizeof(cl_mem), (void *)&c_mem_obj);
errcode |= clSetKernelArg(clKernel, 3, sizeof(DATA_TYPE), (void *)&alpha);
errcode |= clSetKernelArg(clKernel, 4, sizeof(DATA_TYPE), (void *)&beta);
errcode |= clSetKernelArg(clKernel, 5, sizeof(int), (void *)&ni);
errcode |= clSetKernelArg(clKernel, 6, sizeof(int), (void *)&nj);
errcode |= clSetKernelArg(clKernel, 7, sizeof(int), (void *)&nk);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(b_mem_obj);
errcode = clReleaseMemObject(c_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void gemm(int ni, int nj, int nk, DATA_TYPE alpha, DATA_TYPE beta, DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk),
DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), DATA_TYPE POLYBENCH_2D(C,NI,NJ,ni,nj))
{
int i,j,k;
for (i = 0; i < _PB_NI; i++)
{
for (j = 0; j < _PB_NJ; j++)
{
C[i][j] *= beta;
for (k = 0; k < _PB_NK; ++k)
{
C[i][j] += alpha * A[i][k] * B[k][j];
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int ni, int nj,
DATA_TYPE POLYBENCH_2D(C,NI,NJ,ni,nj))
{
int i, j;
for (i = 0; i < ni; i++)
for (j = 0; j < nj; j++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, C[i][j]);
if ((i * ni + j) % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
/* Retrieve problem size. */
int ni = NI;
int nj = NJ;
int nk = NK;
/* Variable declaration/allocation. */
DATA_TYPE alpha;
DATA_TYPE beta;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk);
POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj);
POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NI,NJ,ni,nj);
POLYBENCH_2D_ARRAY_DECL(C_outputFromGpu,DATA_TYPE,NI,NJ,ni,nj);
init(ni, nj, nk, &alpha, &beta, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(C));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(C));
cl_load_prog();
cl_launch_kernel(ni, nj, nk, alpha, beta);
errcode = clEnqueueReadBuffer(clCommandQue, c_mem_obj, CL_TRUE, 0, NI*NJ*sizeof(DATA_TYPE), POLYBENCH_ARRAY(C_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
gemm(ni, nj, nk, alpha, beta, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(C));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(ni, nj, POLYBENCH_ARRAY(C), POLYBENCH_ARRAY(C_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(ni, nj, POLYBENCH_ARRAY(C_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(B);
POLYBENCH_FREE_ARRAY(C);
POLYBENCH_FREE_ARRAY(C_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,36 @@
/**
* gemm.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void gemm(__global DATA_TYPE *a, __global DATA_TYPE *b, __global DATA_TYPE *c, DATA_TYPE alpha, DATA_TYPE beta, int ni, int nj, int nk)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < ni) && (j < nj))
{
c[i * nj + j] *= beta;
int k;
for(k=0; k < nk; k++)
{
c[i * nj + j] += alpha * a[i * nk + k] * b[k * nj +j];
}
}
}

View File

@@ -0,0 +1,67 @@
/**
* gemm.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef GEMM_H
# define GEMM_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NI) && !defined(NJ) && !defined(NK)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define NI 128
#define NJ 128
#define NK 128
# endif
# ifdef SMALL_DATASET
#define NI 256
#define NJ 256
#define NK 256
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define NI 512
#define NJ 512
#define NK 512
# endif
# ifdef LARGE_DATASET
#define NI 1024
#define NJ 1024
#define NK 1024
# endif
# ifdef EXTRALARGE_DATASET
#define NI 2048
#define NJ 2048
#define NK 2048
# endif
# endif /* !N */
# define _PB_NI POLYBENCH_LOOP_BOUND(NI,ni)
# define _PB_NJ POLYBENCH_LOOP_BOUND(NJ,nj)
# define _PB_NK POLYBENCH_LOOP_BOUND(NK,nk)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !GEMM*/

View File

@@ -0,0 +1,278 @@
unsigned char gemm_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x39, 0xd9, 0x45, 0x3f, 0xbe, 0x1a, 0x4f,
0xf8, 0x2b, 0xe5, 0x01, 0x08, 0x00, 0x00, 0x00, 0x2c, 0x07, 0x00, 0x00,
0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x67, 0x65, 0x6d, 0x6d,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00,
0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04,
0x41, 0x80, 0x2d, 0x20, 0x00, 0x7e, 0x0a, 0x05, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x44, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f,
0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x21, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x22, 0xe0, 0x01, 0x8d, 0x0a,
0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0d, 0x0b, 0x07,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x76, 0x78, 0x07, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x20, 0x02, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0xa0, 0x01, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0xe0, 0x2c, 0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0xe0, 0x23, 0xc4, 0x00, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20,
0xc0, 0x0e, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x05, 0x20, 0x80, 0x02,
0x42, 0x12, 0x00, 0x20, 0xe0, 0x03, 0xb1, 0x12, 0xe0, 0x0c, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0x98, 0x02, 0x00, 0x00,
0x98, 0x02, 0x00, 0x00, 0x41, 0x96, 0x2d, 0x20, 0x07, 0x74, 0x76, 0x09,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x22, 0x20, 0x02, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20,
0x28, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03,
0x24, 0x0a, 0x00, 0x20, 0x28, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x74, 0x74, 0x0d, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x22, 0x60, 0x02, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x22,
0x60, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x71, 0x20,
0x07, 0x74, 0x74, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x22,
0x60, 0x02, 0x8d, 0x0a, 0x34, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x40, 0x2e, 0x80, 0x0e, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x22, 0x60, 0x02, 0x00, 0x06,
0x02, 0x5e, 0x20, 0x04, 0x41, 0x56, 0x7a, 0x20, 0x07, 0x70, 0x72, 0x08,
0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0xe0, 0x22, 0xa0, 0x02, 0x8d, 0x3a,
0x1c, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x00, 0x07, 0x00,
0x82, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x70, 0x01, 0x00, 0x62, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x11, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0x98, 0x01, 0x00, 0x00, 0x41, 0x96, 0x5d, 0x20, 0x07, 0x6e, 0x76, 0x09,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x23, 0x20, 0x02, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc4, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x1b, 0x6e, 0x7e, 0x41, 0x80, 0x49, 0x20, 0x00, 0x7e, 0x7e, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d, 0x20, 0x03, 0x8d, 0x0a,
0xc4, 0x0f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f,
0xc4, 0x0f, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x23, 0x60, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x96, 0x19, 0x20, 0xe0, 0x24, 0x7e, 0x0d, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x2d, 0xc8, 0x0f, 0x00, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d, 0x80, 0x0d, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x65, 0x20, 0x07, 0x1b, 0x1b, 0x09,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2d,
0x00, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2d, 0x80, 0x0d, 0x8d, 0x0a, 0x2c, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x23, 0x60, 0x03, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x6d, 0x20, 0x07, 0x24, 0x24, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2d, 0x00, 0x0d, 0x8d, 0x0a,
0x30, 0x01, 0x00, 0x00, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x2d,
0x80, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x10, 0x00, 0x80, 0x05,
0x24, 0x0a, 0x00, 0x20, 0xc4, 0x0f, 0x00, 0x0a, 0x28, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2c, 0x80, 0x04, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x2c,
0x00, 0x0d, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x10, 0x20, 0x80, 0x05,
0x24, 0x0a, 0x00, 0x20, 0xc4, 0x0f, 0x00, 0x0a, 0x28, 0x01, 0x00, 0x00,
0x41, 0x56, 0x76, 0x20, 0x07, 0x20, 0x1d, 0x08, 0x41, 0x20, 0x80, 0x00,
0xe8, 0x3a, 0x40, 0x24, 0x40, 0x0d, 0x8d, 0x3a, 0x18, 0x01, 0x00, 0x00,
0x5b, 0x02, 0x07, 0x20, 0x00, 0x80, 0x83, 0xca, 0x5b, 0x73, 0x01, 0x20,
0x00, 0xb8, 0x88, 0xc6, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x00, 0x07, 0x00,
0x82, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x70, 0x01, 0x00, 0x62, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0x90, 0xfe, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x62, 0x65, 0x74, 0x61,
0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x69, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x6a, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x6b, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int gemm_Gen9core_gen_len = 3300;

View File

@@ -0,0 +1,464 @@
/**
* gemver.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "gemver.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_gemver {
#include "../../polybenchUtilFuncts.h"
#include "gemver_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_kernel clKernel3;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem u1_mem_obj;
cl_mem v1_mem_obj;
cl_mem u2_mem_obj;
cl_mem v2_mem_obj;
cl_mem w_mem_obj;
cl_mem x_mem_obj;
cl_mem y_mem_obj;
cl_mem z_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int n, DATA_TYPE POLYBENCH_1D(w1, N, n), DATA_TYPE POLYBENCH_1D(w2, N, n))
{
int i, fail;
fail = 0;
for (i=0; i < N; i++)
{
if (percentDiff(w1[i], w2[i]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
// Print results
printf("Number of misses: %d\n", fail);
}
void read_cl_file()
{
// // Load the kernel source code into the array source_str
// fp = fopen("gemver.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init(int n, DATA_TYPE *alpha,
DATA_TYPE *beta,
DATA_TYPE POLYBENCH_2D(A,N,N,n,n),
DATA_TYPE POLYBENCH_1D(u1,N,n),
DATA_TYPE POLYBENCH_1D(v1,N,n),
DATA_TYPE POLYBENCH_1D(u2,N,n),
DATA_TYPE POLYBENCH_1D(v2,N,n),
DATA_TYPE POLYBENCH_1D(w,N,n),
DATA_TYPE POLYBENCH_1D(x,N,n),
DATA_TYPE POLYBENCH_1D(y,N,n),
DATA_TYPE POLYBENCH_1D(z,N,n))
{
int i, j;
*alpha = 43532;
*beta = 12313;
for (i = 0; i < N; i++)
{
u1[i] = i;
u2[i] = (i+1)/N/2.0;
v1[i] = (i+1)/N/4.0;
v2[i] = (i+1)/N/6.0;
y[i] = (i+1)/N/8.0;
z[i] = (i+1)/N/9.0;
x[i] = 0.0;
w[i] = 0.0;
for (j = 0; j < N; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / N;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("device id is %d\n",device_id);
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_1D(u1,N,n), DATA_TYPE POLYBENCH_1D(v1,N,n), DATA_TYPE POLYBENCH_1D(u2,N,n),
DATA_TYPE POLYBENCH_1D(v2,N,n), DATA_TYPE POLYBENCH_1D(w,N,n), DATA_TYPE POLYBENCH_1D(x,N,n), DATA_TYPE POLYBENCH_1D(y,N,n),
DATA_TYPE POLYBENCH_1D(z,N,n))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N * N, NULL, &errcode);
u1_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
v1_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
u2_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
v2_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
w_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
x_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
y_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
z_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N * N, A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, u1_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, u1, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, v1_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, v1, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, u2_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, u2, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, v2_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, v2, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, w_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, w, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, x_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, x, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, y_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, y, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, z_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, z, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = gemver_Gen9core_gen_len;
const unsigned char* kernel_bin = gemver_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "gemver_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
// Create the OpenCL kernel
clKernel2 = clCreateKernel(clProgram, "gemver_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel2\n");
// Create the OpenCL kernel
clKernel3 = clCreateKernel(clProgram, "gemver_kernel3", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel3\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int n, DATA_TYPE alpha, DATA_TYPE beta)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_KERNEL_1_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_KERNEL_1_Y;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_1_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_1_X;
globalWorkSize[1] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_1_Y)) * DIM_LOCAL_WORK_GROUP_KERNEL_1_Y;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&v1_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&v2_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(cl_mem), (void *)&u1_mem_obj);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(cl_mem), (void *)&u2_mem_obj);
errcode |= clSetKernelArg(clKernel1, 5, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
size_t global_item_size = sizeof(DATA_TYPE) * N;
size_t local_item_size = 64;
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clEnqueueBarrier(clCommandQue);
int dim = N;
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_KERNEL_2_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_KERNEL_2_Y;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_2_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_2_X;
globalWorkSize[1] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_2_Y)) * DIM_LOCAL_WORK_GROUP_KERNEL_2_Y;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(cl_mem), (void *)&y_mem_obj);
errcode |= clSetKernelArg(clKernel2, 3, sizeof(cl_mem), (void *)&z_mem_obj);
errcode |= clSetKernelArg(clKernel2, 4, sizeof(DATA_TYPE), (void *)&beta);
errcode |= clSetKernelArg(clKernel2, 5, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments2\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel2\n");
clEnqueueBarrier(clCommandQue);
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_KERNEL_3_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_KERNEL_3_Y;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_3_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_3_X;
globalWorkSize[1] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_3_Y)) * DIM_LOCAL_WORK_GROUP_KERNEL_3_Y;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel3, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel3, 1, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel3, 2, sizeof(cl_mem), (void *)&w_mem_obj);
errcode |= clSetKernelArg(clKernel3, 3, sizeof(DATA_TYPE), (void *)&alpha);
errcode |= clSetKernelArg(clKernel3, 4, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments3\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel3, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel3\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(u1_mem_obj);
errcode = clReleaseMemObject(v1_mem_obj);
errcode = clReleaseMemObject(u2_mem_obj);
errcode = clReleaseMemObject(v2_mem_obj);
errcode = clReleaseMemObject(w_mem_obj);
errcode = clReleaseMemObject(x_mem_obj);
errcode = clReleaseMemObject(y_mem_obj);
errcode = clReleaseMemObject(z_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void gemver(int n, DATA_TYPE alpha, DATA_TYPE beta, DATA_TYPE POLYBENCH_2D(A, N, N, n, n), DATA_TYPE POLYBENCH_1D(u1, N, n), DATA_TYPE POLYBENCH_1D(v1, N, n),
DATA_TYPE POLYBENCH_1D(u2, N, n), DATA_TYPE POLYBENCH_1D(v2, N, n), DATA_TYPE POLYBENCH_1D(w, N, n), DATA_TYPE POLYBENCH_1D(x, N, n), DATA_TYPE POLYBENCH_1D(y, N, n),
DATA_TYPE POLYBENCH_1D(z, N, n))
{
int i,j;
for (i = 0; i < _PB_N; i++)
{
for (j = 0; j < _PB_N; j++)
{
A[i][j] = A[i][j] + u1[i] * v1[j] + u2[i] * v2[j];
}
}
for (i = 0; i < _PB_N; i++)
{
for (j = 0; j < _PB_N; j++)
{
x[i] = x[i] + beta * A[j][i] * y[j];
}
}
for (i = 0; i < _PB_N; i++)
{
x[i] = x[i] + z[i];
}
for (i = 0; i < _PB_N; i++)
{
for (j = 0; j < _PB_N; j++)
{
w[i] = w[i] + alpha * A[i][j] * x[j];
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int n,
DATA_TYPE POLYBENCH_1D(w,N,n))
{
int i;
for (i = 0; i < n; i++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, w[i]);
if (i % 20 == 0) fprintf (stderr, "\n");
}
}
int main(int argc, char *argv[])
{
/* Retrieve problem size. */
int n = N;
/* Variable declaration/allocation. */
DATA_TYPE alpha;
DATA_TYPE beta;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,N,N,n,n);
POLYBENCH_1D_ARRAY_DECL(u1,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(v1,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(u2,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(v2,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(w,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(w_outputFromGpu,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(x,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(y,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(z,DATA_TYPE,N,n);
init(n, &alpha, &beta,
POLYBENCH_ARRAY(A),
POLYBENCH_ARRAY(u1),
POLYBENCH_ARRAY(v1),
POLYBENCH_ARRAY(u2),
POLYBENCH_ARRAY(v2),
POLYBENCH_ARRAY(w),
POLYBENCH_ARRAY(x),
POLYBENCH_ARRAY(y),
POLYBENCH_ARRAY(z));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(u1), POLYBENCH_ARRAY(v1), POLYBENCH_ARRAY(u2), POLYBENCH_ARRAY(v2),
POLYBENCH_ARRAY(w), POLYBENCH_ARRAY(x), POLYBENCH_ARRAY(y), POLYBENCH_ARRAY(z));
cl_load_prog();
cl_launch_kernel(n, alpha, beta);
errcode = clEnqueueReadBuffer(clCommandQue, w_mem_obj, CL_TRUE, 0, N*sizeof(DATA_TYPE), POLYBENCH_ARRAY(w_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
gemver(n, alpha, beta, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(u1), POLYBENCH_ARRAY(v1), POLYBENCH_ARRAY(u2), POLYBENCH_ARRAY(v2),
POLYBENCH_ARRAY(w), POLYBENCH_ARRAY(x), POLYBENCH_ARRAY(y), POLYBENCH_ARRAY(z));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(n, POLYBENCH_ARRAY(w), POLYBENCH_ARRAY(w_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(w_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(u1);
POLYBENCH_FREE_ARRAY(v1);
POLYBENCH_FREE_ARRAY(u2);
POLYBENCH_FREE_ARRAY(v2);
POLYBENCH_FREE_ARRAY(w);
POLYBENCH_FREE_ARRAY(w_outputFromGpu);
POLYBENCH_FREE_ARRAY(x);
POLYBENCH_FREE_ARRAY(y);
POLYBENCH_FREE_ARRAY(z);
return 0;
}
}

View File

@@ -0,0 +1,61 @@
/**
* gemver.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void gemver_kernel1(__global DATA_TYPE *A, __global DATA_TYPE *V1, __global DATA_TYPE *V2, __global DATA_TYPE *U1, __global DATA_TYPE *U2, int n)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < n) && (j < n))
{
A[i*n + j] += U1[i] * V1[j] + U2[i] * V2[j];
}
}
__kernel void gemver_kernel2(__global DATA_TYPE *A, __global DATA_TYPE *X, __global DATA_TYPE *Y, __global DATA_TYPE *Z, DATA_TYPE beta, int n)
{
int i = get_global_id(0);
if (i < n)
{
int j;
for(j = 0; j < n; j++)
{
X[i] += beta * A[j * n + i] * Y[j];
}
X[i] += Z[i];
}
}
__kernel void gemver_kernel3(__global DATA_TYPE *A, __global DATA_TYPE *X, __global DATA_TYPE *w, DATA_TYPE alpha, int n)
{
int i = get_global_id(0);
if (i < n)
{
int j;
for(j = 0; j < n; j++)
{
w[i] += alpha * A[i*n + j] * X[j];
}
}
}

View File

@@ -0,0 +1,63 @@
/**
* gemver.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef GEMVER_H
# define GEMVER_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(N)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define N 1024
# endif
# ifdef SMALL_DATASET
#define N 2048
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define N 4096
# endif
# ifdef LARGE_DATASET
#define N 8192
# endif
# ifdef EXTRALARGE_DATASET
#define N 16384
# endif
# endif /* !N */
# define _PB_N POLYBENCH_LOOP_BOUND(N,n)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions for kernel 1*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_1_X 32
#define DIM_LOCAL_WORK_GROUP_KERNEL_1_Y 8
/* Thread block dimensions for kernel 2*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_2_X 256
#define DIM_LOCAL_WORK_GROUP_KERNEL_2_Y 1
/* Thread block dimensions for kernel 3*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_3_X 256
#define DIM_LOCAL_WORK_GROUP_KERNEL_3_Y 1
#endif /* !TWODCONV*/

View File

@@ -0,0 +1,741 @@
unsigned char gemver_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4e, 0xae, 0xc0, 0x6a, 0x9e, 0x7d, 0x0c, 0x33,
0x6a, 0x02, 0xd3, 0x21, 0x10, 0x00, 0x00, 0x00, 0xe4, 0x06, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x54, 0x01, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x67, 0x65, 0x6d, 0x76,
0x65, 0x72, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x31, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x80, 0x2d, 0x20,
0x00, 0x7e, 0x0a, 0x05, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20,
0x44, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x4c, 0x16, 0xc4, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x21,
0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x21, 0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f, 0xc0, 0x00, 0x00, 0x12,
0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f,
0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x22, 0xe0, 0x01, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x0d, 0x0b, 0x07, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x76, 0x78, 0x07, 0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x40, 0x0f, 0x8d, 0x0a, 0x28, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x20, 0x02, 0x8d, 0x0a, 0x28, 0x01, 0x00, 0x00,
0x10, 0x16, 0x5f, 0x25, 0x07, 0x00, 0x0d, 0x09, 0x02, 0x20, 0x81, 0x00,
0x4a, 0x12, 0x00, 0x21, 0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0x20, 0x2e, 0xc4, 0x0f, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x10, 0x19, 0x5f, 0x25, 0x07, 0x00, 0x76, 0x09,
0x05, 0x20, 0x80, 0x02, 0x40, 0x12, 0x00, 0x20, 0x20, 0x0e, 0xb1, 0x12,
0x00, 0x01, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x18, 0x02, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2e, 0xc0, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x22, 0xa0, 0x01, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x41, 0x96, 0x5d, 0x20, 0x07, 0x5d, 0x76, 0x09,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x22, 0x20, 0x02, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2d,
0x40, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x25, 0x20, 0x02, 0x8d, 0x0a, 0x28, 0x01, 0x00, 0x00,
0x40, 0x96, 0x79, 0x20, 0x07, 0x67, 0x74, 0x09, 0x40, 0x96, 0x71, 0x20,
0x07, 0x63, 0x17, 0x09, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x5d, 0x5d, 0x0d,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x24, 0x60, 0x02, 0x8d, 0x0a,
0x3c, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24,
0x60, 0x0d, 0x8d, 0x0a, 0x34, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x25, 0x40, 0x05, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2c, 0xe0, 0x0c, 0x00, 0x06,
0x04, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x75, 0x20, 0x07, 0x72, 0x74, 0x09,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2c, 0x60, 0x0c, 0x00, 0x06,
0x02, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x6d, 0x20, 0x07, 0x19, 0x17, 0x09,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x2b, 0xa0, 0x0b, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x24,
0x00, 0x04, 0x00, 0x06, 0x04, 0x5e, 0x20, 0x04, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x22, 0x60, 0x02, 0x8d, 0x0a, 0x38, 0x01, 0x00, 0x00,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x24, 0x80, 0x04, 0x00, 0x06,
0x02, 0x5e, 0x20, 0x04, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x2d,
0x60, 0x0d, 0x8d, 0x0a, 0x30, 0x01, 0x00, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x25, 0x40, 0x05, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x2d, 0x40, 0x0e, 0x00, 0x06,
0x03, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x65, 0x20, 0x07, 0x5d, 0x5d, 0x09,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23, 0x20, 0x03, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2d,
0xa0, 0x02, 0x00, 0x06, 0x03, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x23, 0x20, 0x0d, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x25, 0x40, 0x05, 0x8d, 0x0a,
0x2c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x2b,
0xa0, 0x0b, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x80, 0x25, 0x40, 0x05, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x41, 0x56, 0x02, 0x20, 0xe7, 0x65, 0x65, 0x61, 0x41, 0x20, 0x80, 0x00,
0xe8, 0x3a, 0x40, 0x24, 0x40, 0x04, 0x8d, 0x3a, 0xc0, 0x04, 0x8d, 0x00,
0x5b, 0xf2, 0x05, 0x20, 0x00, 0x28, 0x73, 0xde, 0x5b, 0x83, 0x02, 0x20,
0x00, 0x10, 0x79, 0xda, 0x40, 0x56, 0x02, 0x20, 0xe7, 0x5b, 0x5b, 0x5f,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x80, 0x25, 0x80, 0x05, 0x8d, 0x3a,
0x00, 0x05, 0x8d, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0xb0, 0x05, 0x00,
0xa2, 0x0b, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0xc0, 0x02, 0x00, 0x42, 0x05, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x40, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x56, 0x31, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x56, 0x32, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x55, 0x31, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x55, 0x32, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0xfb, 0xa9, 0x4e, 0x17, 0x9e, 0x7d, 0x0c, 0x33,
0x6a, 0x02, 0xd3, 0x21, 0x10, 0x00, 0x00, 0x00, 0x70, 0x06, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x10, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x67, 0x65, 0x6d, 0x76,
0x65, 0x72, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x2f, 0x34, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f,
0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0a, 0x04, 0x07, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f,
0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x10, 0x16, 0x2f, 0x25,
0x07, 0x00, 0x0a, 0x09, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0x40, 0x0f, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00,
0x00, 0x0e, 0x00, 0x20, 0xd8, 0x02, 0x00, 0x00, 0xd8, 0x02, 0x00, 0x00,
0x10, 0x00, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20, 0x24, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20,
0x24, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00,
0x06, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e, 0x68, 0x00, 0x00, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21, 0x40, 0x01, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x40, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x65, 0x20,
0x07, 0x0c, 0x0c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x00, 0x0f, 0x8d, 0x0a, 0x2c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x21, 0x80, 0x01, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x2e, 0x00, 0x0f, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x88, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x22, 0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0x40, 0x0f, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x65, 0x20,
0x07, 0x10, 0x10, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e,
0x80, 0x0e, 0x8d, 0x0a, 0x2c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x21, 0x00, 0x02, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x2e, 0x80, 0x0e, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f,
0xc0, 0x00, 0x00, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x20, 0x2e, 0xc0, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0xc0, 0x00, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x15, 0x20, 0xe0, 0x12, 0x7e, 0x0a,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0xc4, 0x0f, 0x00, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0xe0, 0x2d,
0x20, 0x0e, 0x00, 0x06, 0x02, 0x08, 0x11, 0x02, 0x10, 0x17, 0x2f, 0x25,
0x00, 0x00, 0x06, 0x09, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x40, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x40, 0x96, 0x5d, 0x20, 0x07, 0x12, 0x12, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x22,
0x40, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x22, 0x40, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x41, 0x56, 0x02, 0x20, 0x07, 0x14, 0x14, 0x09, 0x41, 0x20, 0x80, 0x00,
0xe8, 0x3a, 0xc0, 0x22, 0xc0, 0x02, 0x8d, 0x3a, 0x20, 0x01, 0x00, 0x00,
0x5b, 0xe2, 0x00, 0x20, 0x01, 0x70, 0xbc, 0x29, 0x5b, 0x63, 0x07, 0x20,
0x01, 0xb0, 0xbf, 0x2d, 0x33, 0x00, 0x80, 0x0c, 0x70, 0xe0, 0x00, 0x00,
0x02, 0x02, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x60, 0x07, 0x00, 0x82, 0x0e, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xe0, 0xfe, 0xff, 0xff, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x23,
0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x2d, 0x40, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x96, 0x6d, 0x20, 0x07, 0x1a, 0x18, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2d, 0xa0, 0x0d, 0x8d, 0x0a, 0x30, 0x01, 0x00, 0x00,
0x40, 0x96, 0x65, 0x20, 0x07, 0x18, 0x18, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x2d, 0xa0, 0x0d, 0x8d, 0x0a, 0x2c, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23, 0x40, 0x03, 0x00, 0x06,
0x03, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2d,
0x60, 0x0d, 0x00, 0x06, 0x03, 0x5e, 0x20, 0x04, 0x40, 0x56, 0x02, 0x20,
0xe7, 0x1c, 0x0e, 0x1c, 0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x20, 0x2d,
0xc0, 0x0e, 0x8d, 0x3a, 0x20, 0x0d, 0x8d, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0xc0, 0x01, 0x00, 0x02, 0x03, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x90, 0x06, 0x00, 0xa2, 0x0d, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x5a, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x62, 0x65, 0x74, 0x61,
0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x43, 0x3e, 0x8e, 0xb8, 0x9e, 0x7d, 0x0c, 0x33, 0x6a, 0x02, 0xd3, 0x21,
0x10, 0x00, 0x00, 0x00, 0xac, 0x05, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00,
0xb0, 0x02, 0x00, 0x00, 0x67, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x5f, 0x6b,
0x65, 0x72, 0x6e, 0x65, 0x6c, 0x33, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f,
0x28, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03,
0x24, 0x0a, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20,
0x1c, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0x00, 0x2e,
0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x0a, 0x04, 0x07, 0x10, 0x20, 0x80, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x40, 0x01, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x00, 0x23,
0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x80, 0x02,
0x42, 0x12, 0x00, 0x20, 0x00, 0x03, 0xb1, 0x12, 0x00, 0x0e, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0xa0, 0x01, 0x00, 0x00,
0xa0, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21,
0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x2e, 0x40, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x41, 0x96, 0x79, 0x20, 0x07, 0x0c, 0x0a, 0x08, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x2f, 0x40, 0x0f, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x0e, 0x0e, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x2e, 0xc0, 0x0e, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x22,
0xc0, 0x01, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x80, 0x2e, 0xc0, 0x0e, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04,
0x40, 0x96, 0x01, 0x20, 0x07, 0x72, 0x0c, 0x06, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x00, 0x0f, 0x8d, 0x0a, 0xc0, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x20, 0x2e, 0xc0, 0x00, 0x00, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20,
0xc0, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0xe0, 0x2d,
0x20, 0x0e, 0x00, 0x06, 0x01, 0x08, 0x11, 0x02, 0x10, 0x17, 0x7b, 0x25,
0x00, 0x00, 0x06, 0x08, 0x40, 0x96, 0x01, 0x20, 0x07, 0x72, 0x72, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20,
0xc0, 0x00, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x80, 0x22, 0x40, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x22, 0x40, 0x02, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x41, 0x56, 0x76, 0x20, 0x07, 0x14, 0x14, 0x08,
0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0xc0, 0x22, 0xc0, 0x02, 0x8d, 0x3a,
0x18, 0x01, 0x00, 0x00, 0x5b, 0x02, 0x01, 0x20, 0x01, 0x80, 0xbc, 0x29,
0x5b, 0x43, 0x07, 0x20, 0x01, 0xa0, 0xbf, 0x2d, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x00, 0x01, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x40, 0x07, 0x00, 0xc2, 0x0e, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0xf0, 0xfe, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x3b, 0x34, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int gemver_Gen9core_gen_len = 8852;

View File

@@ -0,0 +1,348 @@
/**
* gesummv.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "gesummv.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_gesummv {
#include "../../polybenchUtilFuncts.h"
#include "gesummv_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_kernel clKernel3;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
cl_mem x_mem_obj;
cl_mem y_mem_obj;
cl_mem tmp_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int n, DATA_TYPE POLYBENCH_1D(y,N,n), DATA_TYPE POLYBENCH_1D(y_outputFromGpu,N,n))
{
int i, fail;
fail = 0;
for (i=0; i<n; i++)
{
if (percentDiff(y[i], y_outputFromGpu[i]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void init(int n, DATA_TYPE *alpha, DATA_TYPE *beta, DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_2D(B,N,N,n,n),
DATA_TYPE POLYBENCH_1D(x,N,n))
{
int i, j;
*alpha = 43532;
*beta = 12313;
for (i = 0; i < n; i++)
{
x[i] = ((DATA_TYPE) i) / N;
for (j = 0; j < n; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / N;
B[i][j] = ((DATA_TYPE) i*j) / n;
}
}
}
void read_cl_file()
{
// // Load the kernel source code into the array source_str
// fp = fopen("gesummv.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void gesummv(int n, DATA_TYPE alpha, DATA_TYPE beta, DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_2D(B,N,N,n,n), DATA_TYPE POLYBENCH_1D(tmp,N,n),
DATA_TYPE POLYBENCH_1D(x,N,n), DATA_TYPE POLYBENCH_1D(y,N,n))
{
int i, j;
for (i = 0; i < _PB_N; i++)
{
tmp[i] = 0;
y[i] = 0;
for (j = 0; j < _PB_N; j++)
{
tmp[i] = A[i][j] * x[j] + tmp[i];
y[i] = B[i][j] * x[j] + y[i];
}
y[i] = alpha * tmp[i] + beta * y[i];
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_2D(B,N,N,n,n), DATA_TYPE POLYBENCH_1D(x,N,n),
DATA_TYPE POLYBENCH_1D(y,N,n), DATA_TYPE POLYBENCH_1D(tmp,N,n))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N * N, NULL, &errcode);
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N * N, NULL, &errcode);
x_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
y_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
tmp_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N * N, A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N * N, B, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, x_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, x, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, y_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, y, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, tmp_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, tmp, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = gesummv_Gen9core_gen_len;
const unsigned char* kernel_bin = gesummv_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "gesummv_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int n, DATA_TYPE alpha, DATA_TYPE beta)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(cl_mem), (void *)&y_mem_obj);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(cl_mem), (void *)&tmp_mem_obj);
errcode |= clSetKernelArg(clKernel1, 5, sizeof(DATA_TYPE), (void *)&alpha);
errcode |= clSetKernelArg(clKernel1, 6, sizeof(DATA_TYPE), (void *)&beta);
errcode |= clSetKernelArg(clKernel1, 7, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(b_mem_obj);
errcode = clReleaseMemObject(x_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int n,
DATA_TYPE POLYBENCH_1D(y,N,n))
{
int i;
for (i = 0; i < n; i++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, y[i]);
if (i % 20 == 0) fprintf (stderr, "\n");
}
}
int main(int argc, char *argv[])
{
/* Retrieve problem size. */
int n = N;
/* Variable declaration/allocation. */
DATA_TYPE alpha;
DATA_TYPE beta;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,N,N,n,n);
POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,N,N,n,n);
POLYBENCH_1D_ARRAY_DECL(tmp,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(x,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(y,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(y_outputFromGpu,DATA_TYPE,N,n);
init(n, &alpha, &beta, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(x));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(x), POLYBENCH_ARRAY(y), POLYBENCH_ARRAY(tmp));
cl_load_prog();
cl_launch_kernel(n, alpha, beta);
errcode = clEnqueueReadBuffer(clCommandQue, y_mem_obj, CL_TRUE, 0, N*sizeof(DATA_TYPE), POLYBENCH_ARRAY(y_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
gesummv(n, alpha, beta, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(tmp), POLYBENCH_ARRAY(x), POLYBENCH_ARRAY(y));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(n, POLYBENCH_ARRAY(y), POLYBENCH_ARRAY(y_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(y_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(B);
POLYBENCH_FREE_ARRAY(tmp);
POLYBENCH_FREE_ARRAY(x);
POLYBENCH_FREE_ARRAY(y);
POLYBENCH_FREE_ARRAY(y_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,36 @@
/**
* gesummv.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void gesummv_kernel(__global DATA_TYPE *a, __global DATA_TYPE *b, __global DATA_TYPE *x, __global DATA_TYPE *y, __global DATA_TYPE *tmp, DATA_TYPE alpha, DATA_TYPE beta, int n)
{
int i = get_global_id(0);
if (i < n)
{
int j;
for(j = 0; j < n; j++)
{
tmp[i] += a[i * n + j] * x[j];
y[i] += b[i * n + j] * x[j];
}
y[i] = alpha * tmp[i] + beta * y[i];
}
}

View File

@@ -0,0 +1,55 @@
/**
* gesummv.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef GESUMMV_H
# define GESUMMV_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(N)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define N 1024
# endif
# ifdef SMALL_DATASET
#define N 2048
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define N 4096
# endif
# ifdef LARGE_DATASET
#define N 8192
# endif
# ifdef EXTRALARGE_DATASET
#define N 16384
# endif
# endif /* !N */
# define _PB_N POLYBENCH_LOOP_BOUND(N,n)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 256
#define DIM_LOCAL_WORK_GROUP_Y 1
#endif /* !GESUMMV*/

View File

@@ -0,0 +1,306 @@
unsigned char gesummv_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x88, 0x1e, 0xba, 0x42, 0xd4, 0x8e, 0x2e, 0x76,
0xa3, 0xef, 0x14, 0x7f, 0x10, 0x00, 0x00, 0x00, 0xac, 0x07, 0x00, 0x00,
0xc0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x54, 0x01, 0x00, 0x00, 0x30, 0x04, 0x00, 0x00, 0x67, 0x65, 0x73, 0x75,
0x6d, 0x6d, 0x76, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x2f, 0x44, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f,
0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0b, 0x04, 0x07, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f,
0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x10, 0x16, 0x6f, 0x25,
0x07, 0x00, 0x0b, 0x09, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0x40, 0x0f, 0x8d, 0x0a, 0x30, 0x01, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00,
0x00, 0x0e, 0x00, 0x20, 0x88, 0x03, 0x00, 0x00, 0x88, 0x03, 0x00, 0x00,
0x10, 0x00, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20, 0x30, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20,
0x30, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00,
0x06, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e, 0x68, 0x00, 0x00, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x21, 0x60, 0x01, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x40, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x79, 0x20,
0x07, 0x0d, 0x0d, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x00, 0x0f, 0x8d, 0x0a, 0x3c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xe0, 0x21, 0xa0, 0x01, 0x00, 0x06, 0x03, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x2e, 0x00, 0x0f, 0x00, 0x06,
0x03, 0x5e, 0x20, 0x04, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x28, 0x02, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x22, 0x60, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0f, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x41, 0x96, 0x6d, 0x20, 0x07, 0x11, 0x0b, 0x09,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0x40, 0x0f, 0x8d, 0x0a,
0x30, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x15, 0x13, 0x0a,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2e, 0x40, 0x0e, 0x8d, 0x0a,
0x40, 0x01, 0x00, 0x00, 0x40, 0x96, 0x79, 0x20, 0x07, 0x13, 0x13, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x0a,
0x3c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x6e, 0x11, 0x06, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x22,
0x80, 0x0e, 0x8d, 0x0a, 0xc0, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x00, 0x21, 0xc0, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x2c, 0xa0, 0x02, 0x00, 0x06,
0x04, 0x5e, 0x20, 0x04, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d,
0xc0, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x23, 0xe0, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0xc0, 0x23, 0x00, 0x01, 0x00, 0x06,
0x02, 0x08, 0x11, 0x02, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x23,
0x00, 0x0e, 0x00, 0x06, 0x04, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x71, 0x20,
0x07, 0x6a, 0x6c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x23,
0x20, 0x03, 0x8d, 0x0a, 0x34, 0x01, 0x00, 0x00, 0x40, 0x96, 0x75, 0x20,
0x07, 0x61, 0x6c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x24,
0x20, 0x03, 0x8d, 0x0a, 0x38, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xe0, 0x2c, 0x40, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2c, 0x60, 0x03, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20,
0xc0, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x10, 0x17, 0x6f, 0x25,
0x00, 0x00, 0x06, 0x09, 0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20,
0xc0, 0x00, 0x00, 0x0a, 0x30, 0x01, 0x00, 0x00, 0x5b, 0x32, 0x06, 0x20,
0x02, 0x18, 0x9f, 0x3d, 0x5b, 0xf3, 0x01, 0x20, 0x02, 0xf8, 0x94, 0x3d,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x30, 0x06, 0x00, 0xa2, 0x02, 0x00, 0x00,
0x04, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0xf0, 0x01, 0x00,
0x02, 0x0e, 0x00, 0x00, 0x04, 0x5e, 0x02, 0x04, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xe0, 0x2b, 0x20, 0x0c, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0x80, 0x24, 0x00, 0x01, 0x00, 0x06,
0x02, 0x08, 0x11, 0x02, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x2b,
0x60, 0x02, 0x00, 0x06, 0x03, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xa0, 0x2b, 0x20, 0x04, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x24, 0x40, 0x0e, 0x00, 0x06,
0x03, 0x5e, 0x20, 0x04, 0x5b, 0xf2, 0x00, 0x20, 0x02, 0xd8, 0x7e, 0x49,
0x5b, 0x63, 0x07, 0x20, 0x02, 0x28, 0x75, 0x49, 0x33, 0x00, 0x80, 0x0c,
0x70, 0xf0, 0x00, 0x00, 0x62, 0x02, 0x00, 0x00, 0x03, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x07, 0x00, 0x42, 0x0e, 0x00, 0x00,
0x03, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x50, 0xfe, 0xff, 0xff, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x2b, 0x60, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x24, 0x40, 0x0f, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x41, 0x56, 0x66, 0x20, 0x07, 0x2b, 0x0f, 0x09,
0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x20, 0x2a, 0xc0, 0x0e, 0x8d, 0x3a,
0x2c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x57, 0x59, 0x0a,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x25, 0xe0, 0x04, 0x8d, 0x0a,
0x40, 0x01, 0x00, 0x00, 0x40, 0x96, 0x79, 0x20, 0x07, 0x59, 0x59, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x24, 0xe0, 0x04, 0x8d, 0x0a,
0x3c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2a,
0xe0, 0x0a, 0x00, 0x06, 0x04, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x60, 0x2a, 0x20, 0x05, 0x00, 0x06, 0x04, 0x5e, 0x20, 0x04,
0x5b, 0xb2, 0x02, 0x20, 0x02, 0x5a, 0x55, 0x13, 0x5b, 0x13, 0x05, 0x20,
0x02, 0x8a, 0x4e, 0x13, 0x33, 0x00, 0x80, 0x0c, 0x70, 0xb0, 0x02, 0x00,
0x22, 0x0b, 0x00, 0x00, 0x03, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x10, 0x05, 0x00, 0xe2, 0x04, 0x00, 0x00, 0x03, 0x5e, 0x02, 0x04,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x40, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x6c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x78, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x74, 0x6d, 0x70, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x62, 0x65, 0x74, 0x61,
0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int gesummv_Gen9core_gen_len = 3636;

View File

@@ -0,0 +1,366 @@
/**
* mvt.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "mvt.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_mvt {
#include "../../polybenchUtilFuncts.h"
#include "mvt_kernel.h"
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem x1_mem_obj;
cl_mem x2_mem_obj;
cl_mem y1_mem_obj;
cl_mem y2_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
const int LIST_SIZE = N;
char str_temp[1024];
#define RUN_ON_CPU
void compareResults(int n, DATA_TYPE POLYBENCH_1D(x1, N, n), DATA_TYPE POLYBENCH_1D(x1_outputFromGpu, N, n), DATA_TYPE POLYBENCH_1D(x2, N, n), DATA_TYPE POLYBENCH_1D(x2_outputFromGpu, N, n))
{
int i, fail;
fail = 0;
for (i=0; i<n; i++)
{
if (percentDiff(x1[i], x1_outputFromGpu[i]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
if (percentDiff(x2[i], x2_outputFromGpu[i]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// // Load the kernel source code into the array source_str
// fp = fopen("mvt.cl", "r");
// if (!fp) {
// fprintf(stdout, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_array(int n, DATA_TYPE POLYBENCH_2D(A, N, N, n, n), DATA_TYPE POLYBENCH_1D(x1, N, n), DATA_TYPE POLYBENCH_1D(x2, N, n), DATA_TYPE POLYBENCH_1D(y1, N, n), DATA_TYPE POLYBENCH_1D(y2, N, n))
{
int i, j;
for (i = 0; i < n; i++)
{
x1[i] = ((DATA_TYPE) i) / N;
x2[i] = ((DATA_TYPE) i + 1) / N;
y1[i] = ((DATA_TYPE) i + 3) / N;
y2[i] = ((DATA_TYPE) i + 4) / N;
for (j = 0; j < n; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / N;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(a,N,N,n,n), DATA_TYPE POLYBENCH_1D(x1,N,n), DATA_TYPE POLYBENCH_1D(x2,N,n),
DATA_TYPE POLYBENCH_1D(y_1,N,n), DATA_TYPE POLYBENCH_1D(y_2,N,n))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N * N, NULL, &errcode);
x1_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
x2_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
y1_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
y2_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * N, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N * N, a, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, x1_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, x1, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, x2_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, x2, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, y1_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, y_1, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, y2_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * N, y_2, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = mvt_Gen9core_gen_len;
const unsigned char* kernel_bin = mvt_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program %d\n",errcode);
// Create the 1st OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "mvt_kernel1", &errcode);
// Create the 2nd OpenCL kernel
clKernel2 = clCreateKernel(clProgram, "mvt_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&x1_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&y1_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&x2_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(cl_mem), (void *)&y2_mem_obj);
errcode |= clSetKernelArg(clKernel2, 3, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(x1_mem_obj);
errcode = clReleaseMemObject(x2_mem_obj);
errcode = clReleaseMemObject(y1_mem_obj);
errcode = clReleaseMemObject(y2_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void runMvt(int n, DATA_TYPE POLYBENCH_2D(a, N, N, n, n), DATA_TYPE POLYBENCH_1D(x1, N, n), DATA_TYPE POLYBENCH_1D(x2, N, n), DATA_TYPE POLYBENCH_1D(y1, N, n), DATA_TYPE POLYBENCH_1D(y2, N, n))
{
int i, j;
for (i=0; i<_PB_N; i++)
{
for (j=0; j<N; j++)
{
x1[i] = x1[i] + a[i][j] * y1[j];
}
}
for (i=0; i<_PB_N; i++)
{
for (j=0; j<_PB_N; j++)
{
x2[i] = x2[i] + a[j][i] * y2[j];
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int n,
DATA_TYPE POLYBENCH_1D(x1,N,n),
DATA_TYPE POLYBENCH_1D(x2,N,n))
{
int i;
for (i = 0; i < n; i++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, x1[i]);
fprintf (stderr, DATA_PRINTF_MODIFIER, x2[i]);
if (i % 20 == 0) fprintf (stderr, "\n");
}
}
int main(int argc, char *argv[])
{
int n = N;
POLYBENCH_2D_ARRAY_DECL(a,DATA_TYPE,N,N,n,n);
POLYBENCH_1D_ARRAY_DECL(x1,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(x2,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(x1_outputFromGpu,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(x2_outputFromGpu,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(y_1,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(y_2,DATA_TYPE,N,n);
init_array(n, POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(x1), POLYBENCH_ARRAY(x2), POLYBENCH_ARRAY(y_1), POLYBENCH_ARRAY(y_2));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(x1), POLYBENCH_ARRAY(x2), POLYBENCH_ARRAY(y_1), POLYBENCH_ARRAY(y_2));
cl_load_prog();
cl_launch_kernel(n);
errcode = clEnqueueReadBuffer(clCommandQue, x1_mem_obj, CL_TRUE, 0, N*sizeof(DATA_TYPE), POLYBENCH_ARRAY(x1_outputFromGpu), 0, NULL, NULL);
errcode = clEnqueueReadBuffer(clCommandQue, x2_mem_obj, CL_TRUE, 0, N*sizeof(DATA_TYPE), POLYBENCH_ARRAY(x2_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
runMvt(n, POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(x1), POLYBENCH_ARRAY(x2), POLYBENCH_ARRAY(y_1), POLYBENCH_ARRAY(y_2));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(n, POLYBENCH_ARRAY(x1), POLYBENCH_ARRAY(x1_outputFromGpu), POLYBENCH_ARRAY(x2), POLYBENCH_ARRAY(x2_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(x1_outputFromGpu), POLYBENCH_ARRAY(x2_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(a);
POLYBENCH_FREE_ARRAY(x1);
POLYBENCH_FREE_ARRAY(x2);
POLYBENCH_FREE_ARRAY(x1_outputFromGpu);
POLYBENCH_FREE_ARRAY(x2_outputFromGpu);
POLYBENCH_FREE_ARRAY(y_1);
POLYBENCH_FREE_ARRAY(y_2);
return 0;
}
}

View File

@@ -0,0 +1,47 @@
/**
* mvt.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void mvt_kernel1(__global DATA_TYPE *a, __global DATA_TYPE *x1, __global DATA_TYPE *y1, int n)
{
int i = get_global_id(0);
if (i < n)
{
int j;
for (j=0; j < n; j++)
{
x1[i] += a[i * n + j] * y1[j];
}
}
}
__kernel void mvt_kernel2(__global DATA_TYPE *a, __global DATA_TYPE *x2, __global DATA_TYPE *y2, int n)
{
int i = get_global_id(0);
if (i < n)
{
int j;
for (j=0; j < n; j++)
{
x2[i] += a[j * n + i] * y2[j];
}
}
}

View File

@@ -0,0 +1,55 @@
/**
* mvt.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef MVT_H
# define MVT_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(N)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define N 1024
# endif
# ifdef SMALL_DATASET
#define N 2048
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define N 4096
# endif
# ifdef LARGE_DATASET
#define N 8192
# endif
# ifdef EXTRALARGE_DATASET
#define N 16384
# endif
# endif /* !N */
# define _PB_N POLYBENCH_LOOP_BOUND(N,n)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !MVT*/

View File

@@ -0,0 +1,414 @@
unsigned char mvt_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x83, 0xbe, 0x79, 0x89, 0x31, 0xb2, 0xef, 0xd6,
0x72, 0xbe, 0x4d, 0x09, 0x0c, 0x00, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00,
0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0x98, 0x02, 0x00, 0x00, 0x6d, 0x76, 0x74, 0x5f,
0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x31, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f,
0x24, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03,
0x24, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x2f, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20,
0x18, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0xa0, 0x22,
0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x0a, 0x04, 0x07, 0x10, 0x20, 0x80, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00,
0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x40, 0x01, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x20, 0x2e,
0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x80, 0x02,
0x42, 0x12, 0x00, 0x20, 0x20, 0x0e, 0xb1, 0x12, 0xa0, 0x02, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0x88, 0x01, 0x00, 0x00,
0x88, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21,
0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x2e, 0x40, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x41, 0x96, 0x75, 0x20, 0x07, 0x0c, 0x0a, 0x08, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x2f, 0x40, 0x0f, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x0e, 0x0e, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x2e, 0xc0, 0x0e, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x22,
0xc0, 0x01, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x80, 0x2e, 0xc0, 0x0e, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x40, 0x96, 0x01, 0x20, 0x07, 0x72, 0x0c, 0x06, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x00, 0x0f, 0x8d, 0x0a, 0xc0, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x21, 0xc0, 0x00, 0x00, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20,
0xc0, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0x80, 0x22,
0x00, 0x01, 0x00, 0x06, 0x02, 0x08, 0x11, 0x02, 0x10, 0x17, 0x77, 0x25,
0x00, 0x00, 0x06, 0x08, 0x40, 0x96, 0x79, 0x20, 0x07, 0x72, 0x72, 0x08,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20,
0xc0, 0x00, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xe0, 0x2d, 0x40, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2d, 0x40, 0x02, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x5b, 0x02, 0x01, 0x20, 0x02, 0x80, 0xbc, 0x29,
0x5b, 0x43, 0x07, 0x20, 0x02, 0xa0, 0xb7, 0x29, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x00, 0x01, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x40, 0x07, 0x00, 0xc2, 0x0e, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x08, 0xff, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x78, 0x31, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x79, 0x31, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x19, 0x4a, 0x9f, 0xb7,
0x31, 0xb2, 0xef, 0xd6, 0x72, 0xbe, 0x4d, 0x09, 0x0c, 0x00, 0x00, 0x00,
0x34, 0x05, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00,
0x6d, 0x76, 0x74, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x2f, 0x24, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc8, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x80, 0x03,
0x26, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0x60, 0x22, 0xc8, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0a, 0x04, 0x07,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x40, 0x01, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x4a, 0x12, 0x60, 0x2e, 0xc8, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x05, 0x20, 0x80, 0x02, 0x42, 0x12, 0x00, 0x20, 0x60, 0x0e, 0xb1, 0x12,
0x60, 0x02, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20,
0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x21, 0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f, 0x40, 0x0f, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0c, 0x0c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x00, 0x0f, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x21, 0x80, 0x01, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x2e, 0x00, 0x0f, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f,
0xc0, 0x00, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x00, 0x21, 0xc0, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0xc0, 0x00, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x15, 0x20, 0xe0, 0x10, 0x7e, 0x0a,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0xc4, 0x0f, 0x00, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0x40, 0x22,
0x00, 0x01, 0x00, 0x06, 0x02, 0x08, 0x11, 0x02, 0x10, 0x17, 0x77, 0x25,
0x00, 0x00, 0x06, 0x08, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0x00, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x40, 0x96, 0x79, 0x20, 0x07, 0x10, 0x10, 0x08,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2e,
0x00, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xe0, 0x2d, 0x80, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x5b, 0xe2, 0x00, 0x20, 0x02, 0x70, 0xc4, 0x25, 0x5b, 0x63, 0x07, 0x20,
0x02, 0xb0, 0xbf, 0x25, 0x33, 0x00, 0x80, 0x0c, 0x70, 0xe0, 0x00, 0x00,
0x82, 0x01, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x60, 0x07, 0x00, 0x02, 0x0f, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xf8, 0xfe, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x78, 0x32, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x79, 0x32, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int mvt_Gen9core_gen_len = 4932;

View File

@@ -0,0 +1,367 @@
/**
* syr2k.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "syr2k.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_syr2k {
#include "../../polybenchUtilFuncts.h"
#include "syr2k_kernel.h"
char str_temp[1024];
DATA_TYPE acc;
DATA_TYPE ALPHA = 1;
DATA_TYPE BETA = 1;
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_kernel clKernel3;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
cl_mem c_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int ni, DATA_TYPE POLYBENCH_2D(C, NI, NI, ni, ni), DATA_TYPE POLYBENCH_2D(C_outputFromGpu, NI, NI, ni, ni))
{
int i,j,fail;
fail = 0;
// Compare C with D
for (i=0; i<ni; i++)
{
for (j=0; j<ni; j++)
{
if (percentDiff(C[i][j], C_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("syr2k.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_arrays(int ni, int nj,
DATA_TYPE *alpha,
DATA_TYPE *beta,
DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj),
DATA_TYPE POLYBENCH_2D(B,NI,NJ,ni,nj),
DATA_TYPE POLYBENCH_2D(C,NI,NI,ni,ni))
{
int i, j;
*alpha = 32412;
*beta = 2123;
for (i = 0; i < ni; i++)
{
for (j = 0; j < nj; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / ni;
B[i][j] = ((DATA_TYPE) i*j) / ni;
}
}
for (i = 0; i < ni; i++)
{
for (j = 0; j < ni; j++)
{
C[i][j] = ((DATA_TYPE) i*j) / ni;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj), DATA_TYPE POLYBENCH_2D(B,NI,NJ,ni,nj), DATA_TYPE POLYBENCH_2D(C,NI,NJ,ni,nj))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, NI*NJ*sizeof(DATA_TYPE), NULL, &errcode);
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, NI*NJ*sizeof(DATA_TYPE), NULL, &errcode);
c_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, NI*NI*sizeof(DATA_TYPE), NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, NI*NJ*sizeof(DATA_TYPE), A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, NI*NJ*sizeof(DATA_TYPE), B, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, c_mem_obj, CL_TRUE, 0, NI*NI*sizeof(DATA_TYPE), C, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = syr2k_Gen9core_gen_len;
const unsigned char* kernel_bin = syr2k_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "syr2k_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int ni, int nj, DATA_TYPE alpha, DATA_TYPE beta)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NI) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NJ) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode = clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&c_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(DATA_TYPE), (void *)&alpha);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(DATA_TYPE), (void *)&beta);
errcode |= clSetKernelArg(clKernel1, 5, sizeof(int), (void *)&ni);
errcode |= clSetKernelArg(clKernel1, 6, sizeof(int), (void *)&nj);
if(errcode != CL_SUCCESS) printf("Error in setting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(c_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void syr2kCpu(int ni, int nj,
DATA_TYPE alpha,
DATA_TYPE beta,
DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj),
DATA_TYPE POLYBENCH_2D(B,NI,NJ,ni,nj),
DATA_TYPE POLYBENCH_2D(C,NI,NI,ni,ni))
{
int i, j, k;
/* C := alpha*A*B' + alpha*B*A' + beta*C */
for (i = 0; i < _PB_NI; i++)
{
for (j = 0; j < _PB_NI; j++)
{
C[i][j] *= beta;
}
}
for (i = 0; i < _PB_NI; i++)
{
for (j = 0; j < _PB_NI; j++)
{
for (k = 0; k < _PB_NJ; k++)
{
C[i][j] += alpha * A[i][k] * B[j][k];
C[i][j] += alpha * B[i][k] * A[j][k];
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int ni, DATA_TYPE POLYBENCH_2D(C,NI,NI,ni,ni))
{
int i, j;
for (i = 0; i < ni; i++)
for (j = 0; j < ni; j++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, C[i][j]);
if ((i * ni + j) % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
/* Retrieve problem size. */
int ni = NI;
int nj = NJ;
/* Variable declaration/allocation. */
DATA_TYPE alpha;
DATA_TYPE beta;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NJ,ni,nj);
POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NI,NJ,ni,nj);
POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NI,NI,ni,ni);
POLYBENCH_2D_ARRAY_DECL(C_outputFromGpu,DATA_TYPE,NI,NI,ni,ni);
init_arrays(ni, nj, &alpha, &beta, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(C));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(C));
cl_load_prog();
cl_launch_kernel(ni, nj, alpha, beta);
errcode = clEnqueueReadBuffer(clCommandQue, c_mem_obj, CL_TRUE, 0, NI*NJ*sizeof(DATA_TYPE), POLYBENCH_ARRAY(C_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
syr2kCpu(ni, nj, alpha, beta, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(C));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(ni, POLYBENCH_ARRAY(C), POLYBENCH_ARRAY(C_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(ni, POLYBENCH_ARRAY(C_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(B);
POLYBENCH_FREE_ARRAY(C);
POLYBENCH_FREE_ARRAY(C_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,37 @@
/**
* syr2k.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void syr2k_kernel(__global DATA_TYPE *a, __global DATA_TYPE *b, __global DATA_TYPE *c, DATA_TYPE alpha, DATA_TYPE beta, int ni, int nj)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < nj) && (j < nj))
{
c[i * nj + j] *= beta;
int k;
for(k = 0; k < ni; k++)
{
c[i * nj + j] += alpha * a[i * ni + k] * b[j * ni + k] + alpha * b[i * ni + k] * a[j * ni + k];
}
}
}

View File

@@ -0,0 +1,61 @@
/**
* syr2k.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef SYR2K_H
# define SYR2K_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NI) && !defined(NJ)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define NI 256
#define NJ 256
# endif
# ifdef SMALL_DATASET
#define NI 512
#define NJ 512
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define NI 1024
#define NJ 1024
# endif
# ifdef LARGE_DATASET
#define NI 2048
#define NJ 2048
# endif
# ifdef EXTRALARGE_DATASET
#define NI 4096
#define NJ 4096
# endif
# endif /* !N */
# define _PB_NI POLYBENCH_LOOP_BOUND(NI,ni)
# define _PB_NJ POLYBENCH_LOOP_BOUND(NJ,nj)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !SYR2K*/

View File

@@ -0,0 +1,286 @@
unsigned char syr2k_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe1, 0xe0, 0xe4, 0x31, 0x32, 0x25, 0x23, 0xb9,
0x32, 0x32, 0xe5, 0xc4, 0x10, 0x00, 0x00, 0x00, 0xbc, 0x06, 0x00, 0x00,
0x40, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x73, 0x79, 0x72, 0x32,
0x6b, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x2f, 0x34, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0x38, 0x01, 0x00, 0x0a,
0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc8, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x00, 0x00, 0x12,
0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x2f, 0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0xc0, 0x01, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0c, 0x0a, 0x07, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x76, 0x78, 0x07,
0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x00, 0x02, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x80, 0x01, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0x00, 0x27, 0xc8, 0x0f, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x60, 0x2c,
0xc8, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05,
0x22, 0x0a, 0x00, 0x20, 0xc0, 0x0e, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00,
0x05, 0x20, 0x80, 0x02, 0x42, 0x12, 0x00, 0x20, 0x60, 0x0c, 0xb1, 0x12,
0x00, 0x07, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20,
0x58, 0x03, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, 0x41, 0x96, 0x2d, 0x20,
0x07, 0x74, 0x76, 0x09, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x00, 0x02, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x03,
0x24, 0x0a, 0x00, 0x20, 0x20, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x20, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x74, 0x74, 0x0c,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e,
0x80, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x96, 0x6d, 0x20, 0x07, 0x74, 0x74, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x30, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x2e, 0x80, 0x0e, 0x00, 0x06,
0x02, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x22,
0x40, 0x02, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04, 0x41, 0x56, 0x7a, 0x20,
0x07, 0x70, 0x72, 0x08, 0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0xc0, 0x22,
0x80, 0x02, 0x8d, 0x3a, 0x1c, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x00, 0x07, 0x00, 0x82, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x11, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x58, 0x02, 0x00, 0x00, 0x41, 0x96, 0x01, 0x20,
0x07, 0x6e, 0x76, 0x09, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x23,
0x00, 0x02, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x41, 0x96, 0x01, 0x20,
0x07, 0x6c, 0x0c, 0x09, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x23,
0x40, 0x0f, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2c, 0x1e, 0xc4, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x1c, 0x6e, 0x7e, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2d, 0x00, 0x03, 0x8d, 0x0a, 0xc4, 0x0f, 0x00, 0x00,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x24, 0x6c, 0x7e, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x2b, 0x40, 0x03, 0x8d, 0x0a, 0xc4, 0x0f, 0x00, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23, 0x80, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2d,
0x40, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x24, 0x80, 0x04, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2b, 0xa0, 0x0b, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x65, 0x20, 0x07, 0x57, 0x1e, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x25, 0x00, 0x0d, 0x8d, 0x0a,
0x2c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x5d, 0x20, 0x07, 0x20, 0x1e, 0x09,
0x40, 0x96, 0x5d, 0x20, 0x07, 0x53, 0x26, 0x09, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xa0, 0x2a, 0xe0, 0x0a, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2c, 0x00, 0x0d, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x26,
0xc0, 0x05, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x26, 0x60, 0x0b, 0x8d, 0x0a, 0x28, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x24, 0x00, 0x04, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x65, 0x20, 0x07, 0x28, 0x26, 0x09,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2a, 0x60, 0x0a, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x2c,
0xc0, 0x0c, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x2b, 0x60, 0x0b, 0x8d, 0x0a, 0x2c, 0x01, 0x00, 0x00,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x26, 0x40, 0x06, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x25,
0x00, 0x05, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc4, 0x2f, 0xc4, 0x0f, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x25, 0x20, 0x0b, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x10, 0x17, 0x17, 0x25, 0x00, 0x00, 0x7e, 0x09,
0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc4, 0x0f, 0x00, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x41, 0x56, 0x76, 0x20, 0x07, 0x55, 0x55, 0x08,
0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x26, 0x00, 0x06, 0x8d, 0x3a,
0x18, 0x01, 0x00, 0x00, 0x41, 0x56, 0x76, 0x20, 0x07, 0x61, 0x22, 0x08,
0x41, 0x56, 0x02, 0x20, 0xe7, 0x55, 0x55, 0x51, 0x41, 0x20, 0x80, 0x00,
0xe8, 0x3a, 0xe0, 0x2b, 0x80, 0x0c, 0x8d, 0x3a, 0x18, 0x01, 0x00, 0x00,
0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x26, 0x00, 0x06, 0x8d, 0x3a,
0x80, 0x06, 0x8d, 0x00, 0x5b, 0xf2, 0x04, 0x20, 0x00, 0xa8, 0xaa, 0xc2,
0x5b, 0x63, 0x03, 0x20, 0x00, 0x80, 0xb1, 0xbe, 0x40, 0x56, 0x02, 0x20,
0xe7, 0x70, 0x70, 0x4f, 0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0xc0, 0x22,
0xc0, 0x02, 0x8d, 0x3a, 0xc0, 0x06, 0x8d, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x00, 0x07, 0x00, 0x82, 0x0e, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0xe8, 0xfd, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x62, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x3b, 0x34, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x62, 0x65, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x69, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6a, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00
};
unsigned int syr2k_Gen9core_gen_len = 3388;

View File

@@ -0,0 +1,349 @@
/**
* syrk.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "syrk.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 1.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_syrk {
#include "../../polybenchUtilFuncts.h"
#include "syrk_kernel.h"
char str_temp[1024];
DATA_TYPE acc;
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_kernel clKernel3;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem c_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int ni, DATA_TYPE POLYBENCH_2D(C, NI, NI, ni, ni), DATA_TYPE POLYBENCH_2D(C_outputFromGpu, NI, NI, ni, ni))
{
int i,j,fail;
fail = 0;
// Compare C with D
for (i=0; i<ni; i++)
{
for (j=0; j<ni; j++)
{
if (percentDiff(C[i][j], C_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("syrk.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_arrays(int ni, int nj,
DATA_TYPE *alpha,
DATA_TYPE *beta,
DATA_TYPE POLYBENCH_2D(C,NI,NI,ni,ni),
DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj))
{
int i, j;
*alpha = 32412;
*beta = 2123;
for (i = 0; i < ni; i++)
{
for (j = 0; j < nj; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / ni;
}
}
for (i = 0; i < ni; i++)
{
for (j = 0; j < ni; j++)
{
C[i][j] = ((DATA_TYPE) i*j) / ni;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,NJ,NI,nj,ni), DATA_TYPE POLYBENCH_2D(C,NJ,NI,nj,ni))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NJ, NULL, &errcode);
c_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NJ, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NJ, A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, c_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NJ, C, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = syrk_Gen9core_gen_len;
const unsigned char* kernel_bin = syrk_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "syrk_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int ni, int nj, DATA_TYPE alpha, DATA_TYPE beta)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NJ) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NI) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&c_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(DATA_TYPE), (void *)&alpha);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(DATA_TYPE), (void *)&beta);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(int), (void *)&ni);
errcode |= clSetKernelArg(clKernel1, 5, sizeof(int), (void *)&nj);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(c_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void syrk(int ni, int nj, DATA_TYPE alpha, DATA_TYPE beta, DATA_TYPE POLYBENCH_2D(A, NI, NJ, ni, nj), DATA_TYPE POLYBENCH_2D(C, NI, NI, ni, ni))
{
int i, j, k;
/* C := alpha*A*A' + beta*C */
for (i = 0; i < _PB_NI; i++)
{
for (j = 0; j < _PB_NI; j++)
{
C[i][j] *= beta;
}
}
for (i = 0; i < _PB_NI; i++)
{
for (j = 0; j < _PB_NI; j++)
{
for (k = 0; k < _PB_NJ; k++)
{
C[i][j] += alpha * A[i][k] * A[j][k];
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int ni, DATA_TYPE POLYBENCH_2D(C,NI,NI,ni,ni))
{
int i, j;
for (i = 0; i < ni; i++)
for (j = 0; j < ni; j++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, C[i][j]);
if ((i * ni + j) % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
/* Retrieve problem size. */
int ni = NI;
int nj = NJ;
/* Variable declaration/allocation. */
DATA_TYPE alpha;
DATA_TYPE beta;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NJ,ni,nj);
POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NI,NI,ni,ni);
POLYBENCH_2D_ARRAY_DECL(C_outputFromGpu,DATA_TYPE,NI,NI,ni,ni);
init_arrays(ni, nj, &alpha, &beta, POLYBENCH_ARRAY(C), POLYBENCH_ARRAY(A));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(C));
cl_load_prog();
cl_launch_kernel(ni, nj, alpha, beta);
errcode = clEnqueueReadBuffer(clCommandQue, c_mem_obj, CL_TRUE, 0, NI * NJ * sizeof(DATA_TYPE), POLYBENCH_ARRAY(C_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
syrk(ni, nj, alpha, beta, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(C));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(ni, POLYBENCH_ARRAY(C), POLYBENCH_ARRAY(C_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(ni, POLYBENCH_ARRAY(C_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(C);
POLYBENCH_FREE_ARRAY(C_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,35 @@
/**
* syrk.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
/* C := alpha*A*A' + beta*C */
__kernel void syrk_kernel(__global DATA_TYPE *a, __global DATA_TYPE *c, DATA_TYPE alpha, DATA_TYPE beta, int ni, int nj)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < nj) && (j < nj))
{
c[i * nj + j] *= beta;
int k;
for(k=0; k< ni; k++)
{
c[i * nj + j] += alpha * a[i * ni + k] * a[j * ni + k];
}
}
}

View File

@@ -0,0 +1,61 @@
/**
* syrk.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef SYRK_H
# define SYRK_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NI) && !defined(NJ)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define NI 256
#define NJ 256
# endif
# ifdef SMALL_DATASET
#define NI 512
#define NJ 512
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define NI 1024
#define NJ 1024
# endif
# ifdef LARGE_DATASET
#define NI 2048
#define NJ 2048
# endif
# ifdef EXTRALARGE_DATASET
#define NI 4096
#define NJ 4096
# endif
# endif /* !N */
# define _PB_NI POLYBENCH_LOOP_BOUND(NI,ni)
# define _PB_NJ POLYBENCH_LOOP_BOUND(NJ,nj)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !SYRK*/

View File

@@ -0,0 +1,247 @@
unsigned char syrk_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa2, 0x29, 0x32, 0xb5, 0x6e, 0xb4, 0xf2, 0x58,
0x9c, 0x33, 0x96, 0x7c, 0x0c, 0x00, 0x00, 0x00, 0xf8, 0x05, 0x00, 0x00,
0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x73, 0x79, 0x72, 0x6b,
0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f,
0x28, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x2c, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f,
0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22, 0xc0, 0x01, 0x8d, 0x0a,
0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0c, 0x0a, 0x07,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x76, 0x78, 0x07, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x80, 0x01, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0xa0, 0x2c, 0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0xc0, 0x24, 0xc4, 0x00, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x05, 0x22, 0x0a, 0x00, 0x20,
0xc0, 0x0e, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x05, 0x20, 0x80, 0x02,
0x42, 0x12, 0x00, 0x20, 0xc0, 0x04, 0xb1, 0x12, 0xa0, 0x0c, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0xa8, 0x02, 0x00, 0x00,
0xa8, 0x02, 0x00, 0x00, 0x41, 0x96, 0x79, 0x20, 0x07, 0x74, 0x76, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x00, 0x02, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20,
0x18, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03,
0x24, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x74, 0x74, 0x0c, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x40, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x74, 0x74, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x40, 0x02, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x40, 0x2e, 0x80, 0x0e, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x22, 0x40, 0x02, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x41, 0x56, 0x72, 0x20, 0x07, 0x70, 0x72, 0x08,
0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0xc0, 0x22, 0x80, 0x02, 0x8d, 0x3a,
0x14, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x00, 0x07, 0x00,
0x82, 0x0e, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x60, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x11, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xa8, 0x01, 0x00, 0x00, 0x41, 0x96, 0x75, 0x20, 0x07, 0x6e, 0x76, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x23, 0x00, 0x02, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x41, 0x96, 0x75, 0x20, 0x07, 0x6c, 0x0c, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x23, 0x40, 0x0f, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc4, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x1c, 0x6e, 0x7e, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d,
0x00, 0x03, 0x8d, 0x0a, 0xc4, 0x0f, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x66, 0x6c, 0x7e, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24,
0x40, 0x03, 0x8d, 0x0a, 0xc4, 0x0f, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d, 0x40, 0x0d, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2c,
0xc0, 0x0c, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x1c, 0x1c, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2d, 0x40, 0x0d, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x66, 0x66, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x23, 0x80, 0x03, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x2d,
0x40, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x60, 0x2c, 0xc0, 0x0c, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2c, 0x80, 0x04, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f,
0xc4, 0x0f, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x80, 0x05,
0x24, 0x0a, 0x00, 0x20, 0xc4, 0x0f, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00,
0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc4, 0x0f, 0x00, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x41, 0x56, 0x6e, 0x20, 0x07, 0x20, 0x1e, 0x08,
0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x40, 0x24, 0x00, 0x0d, 0x8d, 0x3a,
0x10, 0x01, 0x00, 0x00, 0x5b, 0x02, 0x07, 0x20, 0x00, 0x80, 0x83, 0xc6,
0x5b, 0x63, 0x01, 0x20, 0x00, 0xb0, 0x88, 0xc2, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x00, 0x07, 0x00, 0x82, 0x0e, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x98, 0xfe, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x62, 0x65, 0x74, 0x61,
0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x69, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x6a, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int syrk_Gen9core_gen_len = 2928;

View File

@@ -8,7 +8,9 @@
#include <libc/component.h>
#include "CL/cl.h"
extern int main(int argc, char *argv[]);
// bench includes
#include "benchmark/benchmark_extern.h"
void testvm_construct(Genode::Env &env)
{
@@ -32,7 +34,17 @@ void testvm_construct(Genode::Env &env)
// run 2mm
Libc::with_libc([&] {
clInitGenode(alloc);
main(0, 0);
ns_2mm::main(0,0);
ns_3mm::main(0, 0);
ns_atax::main(0,0);
ns_bicg::main(0,0);
ns_doitgen::main(0,0);
ns_gemm::main(0,0);
ns_gemver::main(0,0);
ns_gesummv::main(0,0);
ns_mvt::main(0,0);
ns_syr2k::main(0,0);
ns_syrk::main(0,0);
});
Genode::log("hello gpgpu completed");

View File

@@ -29,6 +29,7 @@
# define POLYBENCH_CACHE_SIZE_KB 32770
#endif
#define POLYBENCH_TIME 1
int polybench_papi_counters_threadid = POLYBENCH_THREAD_MONITOR;
double polybench_program_total_flops = 0;

View File

@@ -164,6 +164,7 @@ extern const unsigned int polybench_papi_eventlist[];
# define polybench_print_instruments polybench_papi_print();
# endif
#define POLYBENCH_TIME
/* Timing support. */
# if defined(POLYBENCH_TIME) || defined(POLYBENCH_GFLOPS)

View File

@@ -1,5 +1,5 @@
TARGET = hello_gpgpu
SRC_CC = main.cc test.cc CL/cl.cc 2mm.cc
LIBS = base libc
SRC_CC = main.cc test.cc polybench.cc CL/cl.cc benchmark/2mm/2mm.cc benchmark/3mm/3mm.cc benchmark/atax/atax.cc benchmark/bicg/bicg.cc benchmark/doitgen/doitgen.cc benchmark/gemm/gemm.cc benchmark/gemver/gemver.cc benchmark/gesummv/gesummv.cc benchmark/mvt/mvt.cc benchmark/syr2k/syr2k.cc benchmark/syrk/syrk.cc
LIBS = base libc
CC_CXX_WARN_STRICT =