diff --git a/scripts/generate_cl.js b/scripts/generate_cl.js index 1504e7c4..86979462 100644 --- a/scripts/generate_cl.js +++ b/scripts/generate_cl.js @@ -42,7 +42,17 @@ function cn_r() } +function cn_gpu() +{ + const cn_gpu = addIncludes('cryptonight_gpu.cl', [ 'wolf-aes.cl', 'keccak.cl' ]); + + //fs.writeFileSync('cryptonight_gpu_gen.cl', cn_gpu); + fs.writeFileSync('cryptonight_gpu_cl.h', text2h(cn_gpu, 'xmrig', 'cryptonight_gpu_cl')); +} + + process.chdir(path.resolve('src/backend/opencl/cl/cn')); cn(); -cn_r(); \ No newline at end of file +cn_r(); +cn_gpu(); \ No newline at end of file diff --git a/src/backend/opencl/OclWorker.cpp b/src/backend/opencl/OclWorker.cpp index 7b92fc72..40545357 100644 --- a/src/backend/opencl/OclWorker.cpp +++ b/src/backend/opencl/OclWorker.cpp @@ -38,6 +38,10 @@ # include "backend/opencl/runners/OclRxRunner.h" #endif +#ifdef XMRIG_ALGO_CN_GPU +# include "backend/opencl/runners/OclRyoRunner.h" +#endif + #include #include @@ -79,7 +83,15 @@ xmrig::OclWorker::OclWorker(size_t id, const OclLaunchData &data) : break; default: - m_runner = new OclCnRunner(id, data); +# ifdef XMRIG_ALGO_CN_GPU + if (m_algorithm == Algorithm::CN_GPU) { + m_runner = new OclRyoRunner(id, data); + } + else +# endif + { + m_runner = new OclCnRunner(id, data); + } break; } diff --git a/src/backend/opencl/cl/OclSource.cpp b/src/backend/opencl/cl/OclSource.cpp index 43405dfc..00819615 100644 --- a/src/backend/opencl/cl/OclSource.cpp +++ b/src/backend/opencl/cl/OclSource.cpp @@ -23,16 +23,28 @@ */ -#include "backend/opencl/cl/cn/cryptonight_cl.h" #include "backend/opencl/cl/OclSource.h" + +#include "backend/opencl/cl/cn/cryptonight_cl.h" #include "crypto/common/Algorithm.h" +#ifdef XMRIG_ALGO_CN_GPU +# include "backend/opencl/cl/cn/cryptonight_gpu_cl.h" +#endif + + const char *xmrig::OclSource::get(const Algorithm &algorithm) { if (algorithm.family() == Algorithm::RANDOM_X) { return nullptr; // FIXME } +# ifdef XMRIG_ALGO_CN_GPU + if (algorithm == Algorithm::CN_GPU) { + return cryptonight_gpu_cl; + } +# endif + return cryptonight_cl; } diff --git a/src/backend/opencl/cl/cn/cryptonight_gpu.cl b/src/backend/opencl/cl/cn/cryptonight_gpu.cl index 592565ca..d7a313f5 100644 --- a/src/backend/opencl/cl/cn/cryptonight_gpu.cl +++ b/src/backend/opencl/cl/cn/cryptonight_gpu.cl @@ -1,4 +1,14 @@ -R"===( +#include "wolf-aes.cl" +#include "keccak.cl" + + +inline uint getIdx() +{ + return get_global_id(0) - get_global_offset(0); +} + + +#define IDX(x) (x) inline float4 _mm_add_ps(float4 a, float4 b) @@ -6,31 +16,37 @@ inline float4 _mm_add_ps(float4 a, float4 b) return a + b; } + inline float4 _mm_sub_ps(float4 a, float4 b) { return a - b; } + inline float4 _mm_mul_ps(float4 a, float4 b) { return a * b; } + inline float4 _mm_div_ps(float4 a, float4 b) { return a / b; } + inline float4 _mm_and_ps(float4 a, int b) { return as_float4(as_int4(a) & (int4)(b)); } + inline float4 _mm_or_ps(float4 a, int b) { return as_float4(as_int4(a) | (int4)(b)); } + inline float4 _mm_fmod_ps(float4 v, float dc) { float4 d = (float4)(dc); @@ -40,16 +56,19 @@ inline float4 _mm_fmod_ps(float4 v, float dc) return _mm_sub_ps(v, c); } + inline int4 _mm_xor_si128(int4 a, int4 b) { return a ^ b; } + inline float4 _mm_xor_ps(float4 a, int b) { return as_float4(as_int4(a) ^ (int4)(b)); } + inline int4 _mm_alignr_epi8(int4 a, const uint rot) { const uint right = 8 * rot; @@ -63,7 +82,8 @@ inline int4 _mm_alignr_epi8(int4 a, const uint rot) } -inline global int4* scratchpad_ptr(uint idx, uint n, __global int *lpad) { return (__global int4*)((__global char*)lpad + (idx & 0x1FFFC0) + n * 16); } +inline global int4* scratchpad_ptr(uint idx, uint n, __global int *lpad) { return (__global int4*)((__global char*)lpad + (idx & MASK) + n * 16); } + inline float4 fma_break(float4 x) { @@ -72,6 +92,7 @@ inline float4 fma_break(float4 x) return _mm_or_ps(x, 0x00800000); } + inline void sub_round(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd_c, float4* n, float4* d, float4* c) { n1 = _mm_add_ps(n1, *c); @@ -96,6 +117,7 @@ inline void sub_round(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd_c, } + // 9*8 + 2 = 74 inline void round_compute(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd_c, float4* c, float4* r) { @@ -117,14 +139,16 @@ inline void round_compute(float4 n0, float4 n1, float4 n2, float4 n3, float4 rnd *r =_mm_add_ps(*r, _mm_div_ps(n,d)); } + inline int4 single_comupte(float4 n0, float4 n1, float4 n2, float4 n3, float cnt, float4 rnd_c, __local float4* sum) { float4 c= (float4)(cnt); // 35 maths calls follow (140 FLOPS) float4 r = (float4)(0.0f); - for(int i = 0; i < 4; ++i) + for (int i = 0; i < 4; ++i) { round_compute(n0, n1, n2, n3, rnd_c, &c, &r); + } // do a quick fmod by setting exp to 2 r = _mm_and_ps(r, 0x807FFFFF); @@ -135,6 +159,7 @@ inline int4 single_comupte(float4 n0, float4 n1, float4 n2, float4 n3, float cnt return convert_int4_rte(r); } + inline void single_comupte_wrap(const uint rot, int4 v0, int4 v1, int4 v2, int4 v3, float cnt, float4 rnd_c, __local float4* sum, __local int4* out) { float4 n0 = convert_float4_rte(v0); @@ -146,8 +171,6 @@ inline void single_comupte_wrap(const uint rot, int4 v0, int4 v1, int4 v2, int4 *out = rot == 0 ? r : _mm_alignr_epi8(r, rot); } -)===" -R"===( static const __constant uint look[16][4] = { {0, 1, 2, 3}, @@ -171,6 +194,7 @@ static const __constant uint look[16][4] = { {3, 0, 2, 1} }; + static const __constant float ccnt[16] = { 1.34375f, 1.28125f, @@ -193,23 +217,18 @@ static const __constant float ccnt[16] = { 1.4609375f }; + struct SharedMemChunk { int4 out[16]; float4 va[16]; }; + __attribute__((reqd_work_group_size(WORKSIZE * 16, 1, 1))) -__kernel void cn1_cn_gpu(__global int *lpad_in, __global int *spad, uint numThreads) +__kernel void cn1(__global int *lpad_in, __global int *spad, uint numThreads) { const uint gIdx = getIdx(); - -# if (COMP_MODE==1) - if (gIdx / 16 >= numThreads) { - return; - } -# endif - uint chunk = get_local_id(0) / 16; __global int* lpad = (__global int*)((__global char*)lpad_in + MEMORY * (gIdx/16)); @@ -229,9 +248,8 @@ __kernel void cn1_cn_gpu(__global int *lpad_in, __global int *spad, uint numThre const uint tidm = tid % 4; const uint block = tidd * 16 + tidm; - #pragma unroll 1 - for(size_t i = 0; i < 0xC000; i++) - { + #pragma unroll CN_UNROLL + for (uint i = 0; i < ITERATIONS; i++) { mem_fence(CLK_LOCAL_MEM_FENCE); int tmp = ((__global int*)scratchpad_ptr(s, tidd, lpad))[tidm]; ((__local int*)(smem->out))[tid] = tmp; @@ -251,8 +269,9 @@ __kernel void cn1_cn_gpu(__global int *lpad_in, __global int *spad, uint numThre mem_fence(CLK_LOCAL_MEM_FENCE); int outXor = ((__local int*)smem->out)[block]; - for(uint dd = block + 4; dd < (tidd + 1) * 16; dd += 4) + for (uint dd = block + 4; dd < (tidd + 1) * 16; dd += 4) { outXor ^= ((__local int*)smem->out)[dd]; + } ((__global int*)scratchpad_ptr(s, tidd, lpad))[tidm] = outXor ^ tmp; ((__local int*)smem->out)[tid] = outXor; @@ -281,56 +300,53 @@ __kernel void cn1_cn_gpu(__global int *lpad_in, __global int *spad, uint numThre } } -)===" -R"===( static const __constant uint skip[3] = { 20,22,22 }; + inline void generate_512(uint idx, __local ulong* in, __global ulong* out) { ulong hash[25]; hash[0] = in[0] ^ idx; - for(int i = 1; i < 25; ++i) + for (int i = 1; i < 25; ++i) { hash[i] = in[i]; + } - for(int a = 0; a < 3;++a) - { + for (int a = 0; a < 3; ++a) { keccakf1600_1(hash); - for(int i = 0; i < skip[a]; ++i) + for (int i = 0; i < skip[a]; ++i) { out[i] = hash[i]; - out+=skip[a]; + } + + out += skip[a]; } } + __attribute__((reqd_work_group_size(8, 8, 1))) -__kernel void cn0_cn_gpu(__global ulong *input, __global int *Scratchpad, __global ulong *states, uint Threads) +__kernel void cn0(__global ulong *input, __global int *Scratchpad, __global ulong *states, uint Threads) { const uint gIdx = getIdx(); __local ulong State_buf[8 * 25]; __local ulong* State = State_buf + get_local_id(0) * 25; -# if (COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) -# endif { states += 25 * gIdx; Scratchpad = (__global int*)((__global char*)Scratchpad + MEMORY * gIdx); - if (get_local_id(1) == 0) - { + if (get_local_id(1) == 0) { -// NVIDIA -#ifdef __NV_CL_C_VERSION +# ifdef __NV_CL_C_VERSION for(uint i = 0; i < 8; ++i) State[i] = input[i]; -#else +# else ((__local ulong8 *)State)[0] = vload8(0, input); -#endif +# endif + State[8] = input[8]; State[9] = input[9]; State[10] = input[10]; @@ -362,8 +378,9 @@ __kernel void cn0_cn_gpu(__global ulong *input, __global int *Scratchpad, __glob } } + __attribute__((reqd_work_group_size(64, 1, 1))) -__kernel void cn00_cn_gpu(__global int *Scratchpad, __global ulong *states) +__kernel void cn00(__global int *Scratchpad, __global ulong *states) { const uint gIdx = getIdx() / 64; __local ulong State[25]; @@ -372,20 +389,20 @@ __kernel void cn00_cn_gpu(__global int *Scratchpad, __global ulong *states) Scratchpad = (__global int*)((__global char*)Scratchpad + MEMORY * gIdx); - for(int i = get_local_id(0); i < 25; i+=get_local_size(0)) + for (int i = get_local_id(0); i < 25; i += get_local_size(0)) { State[i] = states[i]; + } barrier(CLK_LOCAL_MEM_FENCE); - - for(uint i = get_local_id(0); i < MEMORY / 512; i += get_local_size(0)) - { - generate_512(i, State, (__global ulong*)((__global uchar*)Scratchpad + i*512)); + for (uint i = get_local_id(0); i < MEMORY / 512; i += get_local_size(0)) { + generate_512(i, State, (__global ulong*)((__global uchar*)Scratchpad + i * 512)); } } + __attribute__((reqd_work_group_size(8, 8, 1))) -__kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __global uint *output, ulong Target, uint Threads) +__kernel void cn2(__global uint4 *Scratchpad, __global ulong *states, __global uint *output, ulong Target, uint Threads) { __local uint AES0[256], AES1[256], AES2[256], AES3[256]; uint ExpandedKey2[40]; @@ -406,24 +423,16 @@ __kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __g __local uint4 xin1[8][8]; __local uint4 xin2[8][8]; -# if (COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) -# endif { states += 25 * gIdx; Scratchpad += gIdx * (MEMORY >> 4); #if defined(__Tahiti__) || defined(__Pitcairn__) - for(int i = 0; i < 4; ++i) ((ulong *)ExpandedKey2)[i] = states[i + 4]; text = vload4(get_local_id(1) + 4, (__global uint *)states); - #else - text = vload4(get_local_id(1) + 4, (__global uint *)states); ((uint8 *)ExpandedKey2)[0] = vload8(1, (__global uint *)states); - #endif AESExpandKey256(ExpandedKey2); @@ -437,15 +446,10 @@ __kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __g __local uint4* xin2_load = &xin2[(get_local_id(1) + 1) % 8][get_local_id(0)]; *xin2_store = (uint4)(0, 0, 0, 0); -# if (COMP_MODE == 1) - // do not use early return here - if (gIdx < Threads) -# endif { #pragma unroll 2 - for(int i = 0, i1 = get_local_id(1); i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) - { + for (int i = 0, i1 = get_local_id(1); i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) { text ^= Scratchpad[(uint)i1]; barrier(CLK_LOCAL_MEM_FENCE); text ^= *xin2_load; @@ -489,20 +493,12 @@ __kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __g } __local ulong State_buf[8 * 25]; -# if (COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) -# endif { vstore2(as_ulong2(text), get_local_id(1) + 4, states); } barrier(CLK_GLOBAL_MEM_FENCE); -# if (COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) -# endif { if(!get_local_id(1)) { @@ -522,5 +518,3 @@ __kernel void cn2_cn_gpu(__global uint4 *Scratchpad, __global ulong *states, __g } mem_fence(CLK_GLOBAL_MEM_FENCE); } - -)===" diff --git a/src/backend/opencl/cl/cn/cryptonight_gpu_cl.h b/src/backend/opencl/cl/cn/cryptonight_gpu_cl.h new file mode 100644 index 00000000..da7a2731 --- /dev/null +++ b/src/backend/opencl/cl/cn/cryptonight_gpu_cl.h @@ -0,0 +1,880 @@ +#pragma once + +namespace xmrig { + +static char cryptonight_gpu_cl[27898] = { + 0x23,0x69,0x66,0x6e,0x64,0x65,0x66,0x20,0x57,0x4f,0x4c,0x46,0x5f,0x41,0x45,0x53,0x5f,0x43,0x4c,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x57,0x4f,0x4c,0x46, + 0x5f,0x41,0x45,0x53,0x5f,0x43,0x4c,0x0a,0x0a,0x23,0x69,0x66,0x64,0x65,0x66,0x20,0x63,0x6c,0x5f,0x61,0x6d,0x64,0x5f,0x6d,0x65,0x64,0x69,0x61,0x5f,0x6f,0x70,0x73, + 0x32,0x0a,0x23,0x20,0x20,0x20,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x4f,0x50,0x45,0x4e,0x43,0x4c,0x20,0x45,0x58,0x54,0x45,0x4e,0x53,0x49,0x4f,0x4e,0x20,0x63,0x6c, + 0x5f,0x61,0x6d,0x64,0x5f,0x6d,0x65,0x64,0x69,0x61,0x5f,0x6f,0x70,0x73,0x32,0x20,0x3a,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x0a,0x0a,0x23,0x20,0x20,0x20,0x64,0x65, + 0x66,0x69,0x6e,0x65,0x20,0x78,0x6d,0x72,0x69,0x67,0x5f,0x61,0x6d,0x64,0x5f,0x62,0x66,0x65,0x28,0x73,0x72,0x63,0x30,0x2c,0x20,0x73,0x72,0x63,0x31,0x2c,0x20,0x73, + 0x72,0x63,0x32,0x29,0x20,0x61,0x6d,0x64,0x5f,0x62,0x66,0x65,0x28,0x73,0x72,0x63,0x30,0x2c,0x20,0x73,0x72,0x63,0x31,0x2c,0x20,0x73,0x72,0x63,0x32,0x29,0x0a,0x23, + 0x65,0x6c,0x73,0x65,0x0a,0x2f,0x2a,0x20,0x74,0x61,0x6b,0x65,0x6e,0x20,0x66,0x72,0x6f,0x6d,0x3a,0x20,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e, + 0x6b,0x68,0x72,0x6f,0x6e,0x6f,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x72,0x65,0x67,0x69,0x73,0x74,0x72,0x79,0x2f,0x4f,0x70,0x65,0x6e,0x43,0x4c,0x2f,0x65,0x78,0x74,0x65, + 0x6e,0x73,0x69,0x6f,0x6e,0x73,0x2f,0x61,0x6d,0x64,0x2f,0x63,0x6c,0x5f,0x61,0x6d,0x64,0x5f,0x6d,0x65,0x64,0x69,0x61,0x5f,0x6f,0x70,0x73,0x32,0x2e,0x74,0x78,0x74, + 0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x42,0x75,0x69,0x6c,0x74,0x2d,0x69,0x6e,0x20,0x46,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x0a,0x20,0x2a,0x20,0x20,0x20, + 0x20,0x20,0x75,0x69,0x6e,0x74,0x6e,0x20,0x61,0x6d,0x64,0x5f,0x62,0x66,0x65,0x20,0x28,0x75,0x69,0x6e,0x74,0x6e,0x20,0x73,0x72,0x63,0x30,0x2c,0x20,0x75,0x69,0x6e, + 0x74,0x6e,0x20,0x73,0x72,0x63,0x31,0x2c,0x20,0x75,0x69,0x6e,0x74,0x6e,0x20,0x73,0x72,0x63,0x32,0x29,0x0a,0x20,0x2a,0x20,0x20,0x20,0x44,0x65,0x73,0x63,0x72,0x69, + 0x70,0x74,0x69,0x6f,0x6e,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x4e,0x4f,0x54,0x45,0x3a,0x20,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x20,0x3e,0x3e,0x20,0x62, + 0x65,0x6c,0x6f,0x77,0x20,0x72,0x65,0x70,0x72,0x65,0x73,0x65,0x6e,0x74,0x20,0x6c,0x6f,0x67,0x69,0x63,0x61,0x6c,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x73,0x68,0x69, + 0x66,0x74,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x3d,0x20,0x73,0x72,0x63,0x31,0x2e,0x73,0x30,0x20,0x26,0x20,0x33,0x31,0x3b, + 0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x20,0x3d,0x20,0x73,0x72,0x63,0x32,0x2e,0x73,0x30,0x20,0x26,0x20,0x33,0x31,0x3b,0x0a,0x20,0x2a, + 0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x77,0x69,0x64,0x74,0x68,0x20,0x3d,0x20,0x30,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x73,0x74, + 0x2e,0x73,0x30,0x20,0x3d,0x20,0x30,0x3b,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x20,0x28,0x6f,0x66,0x66,0x73,0x65,0x74,0x20, + 0x2b,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x20,0x3c,0x20,0x33,0x32,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x73,0x74,0x2e,0x73,0x30,0x20, + 0x3d,0x20,0x28,0x73,0x72,0x63,0x30,0x2e,0x73,0x30,0x20,0x3c,0x3c,0x20,0x28,0x33,0x32,0x20,0x2d,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x2d,0x20,0x77,0x69,0x64, + 0x74,0x68,0x29,0x29,0x20,0x3e,0x3e,0x20,0x28,0x33,0x32,0x20,0x2d,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x3b,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x65,0x6c,0x73, + 0x65,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x73,0x74,0x2e,0x73,0x30,0x20,0x3d,0x20,0x73,0x72,0x63,0x30,0x2e,0x73,0x30,0x20,0x3e,0x3e, + 0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3b,0x0a,0x20,0x2a,0x20,0x20,0x20,0x20,0x20,0x73,0x69,0x6d,0x69,0x6c,0x61,0x72,0x20,0x6f,0x70,0x65,0x72,0x61,0x74,0x69,0x6f, + 0x6e,0x20,0x61,0x70,0x70,0x6c,0x69,0x65,0x64,0x20,0x74,0x6f,0x20,0x6f,0x74,0x68,0x65,0x72,0x20,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x73,0x20,0x6f,0x66, + 0x20,0x74,0x68,0x65,0x20,0x76,0x65,0x63,0x74,0x6f,0x72,0x73,0x0a,0x20,0x2a,0x2f,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x69,0x6e,0x74,0x20,0x78,0x6d,0x72,0x69, + 0x67,0x5f,0x61,0x6d,0x64,0x5f,0x62,0x66,0x65,0x28,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x73,0x72,0x63,0x30,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74, + 0x20,0x75,0x69,0x6e,0x74,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x0a, + 0x7b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2a,0x20,0x63,0x61,0x73,0x74,0x73,0x20,0x61,0x72,0x65,0x20,0x72,0x65,0x6d,0x6f,0x76,0x65,0x64,0x20,0x62,0x65,0x63,0x61,0x75, + 0x73,0x65,0x20,0x77,0x65,0x20,0x63,0x61,0x6e,0x20,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x20,0x65,0x76,0x65,0x72,0x79,0x74,0x68,0x69,0x6e,0x67,0x20,0x61, + 0x73,0x20,0x75,0x69,0x6e,0x74,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x69,0x6e,0x74,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x3d,0x20,0x73,0x72,0x63,0x31,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x69,0x6e,0x74,0x20,0x77,0x69,0x64,0x74,0x68,0x20,0x3d,0x20,0x73,0x72,0x63,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a, + 0x20,0x72,0x65,0x6d,0x6f,0x76,0x65,0x20,0x63,0x68,0x65,0x63,0x6b,0x20,0x66,0x6f,0x72,0x20,0x65,0x64,0x67,0x65,0x20,0x63,0x61,0x73,0x65,0x2c,0x20,0x74,0x68,0x69, + 0x73,0x20,0x66,0x75,0x6e,0x63,0x74,0x69,0x6f,0x6e,0x20,0x69,0x73,0x20,0x61,0x6c,0x77,0x61,0x79,0x73,0x20,0x63,0x61,0x6c,0x6c,0x65,0x64,0x20,0x77,0x69,0x74,0x68, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x60,0x77,0x69,0x64,0x74,0x68,0x3d,0x3d,0x38,0x60,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x40,0x63,0x6f,0x64,0x65,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x20,0x77,0x69,0x64,0x74,0x68,0x20,0x3d,0x3d,0x20,0x30,0x20,0x29,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x2a,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x40,0x65,0x6e,0x64,0x63,0x6f,0x64,0x65, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x2f,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x28,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x2b,0x20,0x77,0x69,0x64,0x74,0x68, + 0x29,0x20,0x3c,0x20,0x33,0x32,0x75,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x28,0x73,0x72,0x63,0x30,0x20, + 0x3c,0x3c,0x20,0x28,0x33,0x32,0x75,0x20,0x2d,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x2d,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x29,0x20,0x3e,0x3e,0x20,0x28,0x33, + 0x32,0x75,0x20,0x2d,0x20,0x77,0x69,0x64,0x74,0x68,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73, + 0x72,0x63,0x30,0x20,0x3e,0x3e,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3b,0x0a,0x7d,0x0a,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x0a,0x2f,0x2f,0x20,0x41,0x45,0x53, + 0x20,0x74,0x61,0x62,0x6c,0x65,0x20,0x2d,0x20,0x74,0x68,0x65,0x20,0x6f,0x74,0x68,0x65,0x72,0x20,0x74,0x68,0x72,0x65,0x65,0x20,0x61,0x72,0x65,0x20,0x67,0x65,0x6e, + 0x65,0x72,0x61,0x74,0x65,0x64,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x66,0x6c,0x79,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20, + 0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x41,0x45,0x53,0x30,0x5f,0x43,0x5b,0x32,0x35,0x36,0x5d,0x20,0x3d,0x0a,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x35,0x36,0x33,0x36,0x33,0x43,0x36,0x55,0x2c,0x20,0x30,0x78,0x38,0x34,0x37,0x43,0x37,0x43,0x46,0x38,0x55,0x2c,0x20,0x30,0x78, + 0x39,0x39,0x37,0x37,0x37,0x37,0x45,0x45,0x55,0x2c,0x20,0x30,0x78,0x38,0x44,0x37,0x42,0x37,0x42,0x46,0x36,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x44, + 0x46,0x32,0x46,0x32,0x46,0x46,0x55,0x2c,0x20,0x30,0x78,0x42,0x44,0x36,0x42,0x36,0x42,0x44,0x36,0x55,0x2c,0x20,0x30,0x78,0x42,0x31,0x36,0x46,0x36,0x46,0x44,0x45, + 0x55,0x2c,0x20,0x30,0x78,0x35,0x34,0x43,0x35,0x43,0x35,0x39,0x31,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x30,0x33,0x30,0x33,0x30,0x36,0x30,0x55,0x2c, + 0x20,0x30,0x78,0x30,0x33,0x30,0x31,0x30,0x31,0x30,0x32,0x55,0x2c,0x20,0x30,0x78,0x41,0x39,0x36,0x37,0x36,0x37,0x43,0x45,0x55,0x2c,0x20,0x30,0x78,0x37,0x44,0x32, + 0x42,0x32,0x42,0x35,0x36,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x31,0x39,0x46,0x45,0x46,0x45,0x45,0x37,0x55,0x2c,0x20,0x30,0x78,0x36,0x32,0x44,0x37,0x44, + 0x37,0x42,0x35,0x55,0x2c,0x20,0x30,0x78,0x45,0x36,0x41,0x42,0x41,0x42,0x34,0x44,0x55,0x2c,0x20,0x30,0x78,0x39,0x41,0x37,0x36,0x37,0x36,0x45,0x43,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x34,0x35,0x43,0x41,0x43,0x41,0x38,0x46,0x55,0x2c,0x20,0x30,0x78,0x39,0x44,0x38,0x32,0x38,0x32,0x31,0x46,0x55,0x2c,0x20,0x30,0x78, + 0x34,0x30,0x43,0x39,0x43,0x39,0x38,0x39,0x55,0x2c,0x20,0x30,0x78,0x38,0x37,0x37,0x44,0x37,0x44,0x46,0x41,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x31,0x35, + 0x46,0x41,0x46,0x41,0x45,0x46,0x55,0x2c,0x20,0x30,0x78,0x45,0x42,0x35,0x39,0x35,0x39,0x42,0x32,0x55,0x2c,0x20,0x30,0x78,0x43,0x39,0x34,0x37,0x34,0x37,0x38,0x45, + 0x55,0x2c,0x20,0x30,0x78,0x30,0x42,0x46,0x30,0x46,0x30,0x46,0x42,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x43,0x41,0x44,0x41,0x44,0x34,0x31,0x55,0x2c, + 0x20,0x30,0x78,0x36,0x37,0x44,0x34,0x44,0x34,0x42,0x33,0x55,0x2c,0x20,0x30,0x78,0x46,0x44,0x41,0x32,0x41,0x32,0x35,0x46,0x55,0x2c,0x20,0x30,0x78,0x45,0x41,0x41, + 0x46,0x41,0x46,0x34,0x35,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x46,0x39,0x43,0x39,0x43,0x32,0x33,0x55,0x2c,0x20,0x30,0x78,0x46,0x37,0x41,0x34,0x41, + 0x34,0x35,0x33,0x55,0x2c,0x20,0x30,0x78,0x39,0x36,0x37,0x32,0x37,0x32,0x45,0x34,0x55,0x2c,0x20,0x30,0x78,0x35,0x42,0x43,0x30,0x43,0x30,0x39,0x42,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x32,0x42,0x37,0x42,0x37,0x37,0x35,0x55,0x2c,0x20,0x30,0x78,0x31,0x43,0x46,0x44,0x46,0x44,0x45,0x31,0x55,0x2c,0x20,0x30,0x78, + 0x41,0x45,0x39,0x33,0x39,0x33,0x33,0x44,0x55,0x2c,0x20,0x30,0x78,0x36,0x41,0x32,0x36,0x32,0x36,0x34,0x43,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x41, + 0x33,0x36,0x33,0x36,0x36,0x43,0x55,0x2c,0x20,0x30,0x78,0x34,0x31,0x33,0x46,0x33,0x46,0x37,0x45,0x55,0x2c,0x20,0x30,0x78,0x30,0x32,0x46,0x37,0x46,0x37,0x46,0x35, + 0x55,0x2c,0x20,0x30,0x78,0x34,0x46,0x43,0x43,0x43,0x43,0x38,0x33,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x43,0x33,0x34,0x33,0x34,0x36,0x38,0x55,0x2c, + 0x20,0x30,0x78,0x46,0x34,0x41,0x35,0x41,0x35,0x35,0x31,0x55,0x2c,0x20,0x30,0x78,0x33,0x34,0x45,0x35,0x45,0x35,0x44,0x31,0x55,0x2c,0x20,0x30,0x78,0x30,0x38,0x46, + 0x31,0x46,0x31,0x46,0x39,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x39,0x33,0x37,0x31,0x37,0x31,0x45,0x32,0x55,0x2c,0x20,0x30,0x78,0x37,0x33,0x44,0x38,0x44, + 0x38,0x41,0x42,0x55,0x2c,0x20,0x30,0x78,0x35,0x33,0x33,0x31,0x33,0x31,0x36,0x32,0x55,0x2c,0x20,0x30,0x78,0x33,0x46,0x31,0x35,0x31,0x35,0x32,0x41,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x43,0x30,0x34,0x30,0x34,0x30,0x38,0x55,0x2c,0x20,0x30,0x78,0x35,0x32,0x43,0x37,0x43,0x37,0x39,0x35,0x55,0x2c,0x20,0x30,0x78, + 0x36,0x35,0x32,0x33,0x32,0x33,0x34,0x36,0x55,0x2c,0x20,0x30,0x78,0x35,0x45,0x43,0x33,0x43,0x33,0x39,0x44,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x38, + 0x31,0x38,0x31,0x38,0x33,0x30,0x55,0x2c,0x20,0x30,0x78,0x41,0x31,0x39,0x36,0x39,0x36,0x33,0x37,0x55,0x2c,0x20,0x30,0x78,0x30,0x46,0x30,0x35,0x30,0x35,0x30,0x41, + 0x55,0x2c,0x20,0x30,0x78,0x42,0x35,0x39,0x41,0x39,0x41,0x32,0x46,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x39,0x30,0x37,0x30,0x37,0x30,0x45,0x55,0x2c, + 0x20,0x30,0x78,0x33,0x36,0x31,0x32,0x31,0x32,0x32,0x34,0x55,0x2c,0x20,0x30,0x78,0x39,0x42,0x38,0x30,0x38,0x30,0x31,0x42,0x55,0x2c,0x20,0x30,0x78,0x33,0x44,0x45, + 0x32,0x45,0x32,0x44,0x46,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x36,0x45,0x42,0x45,0x42,0x43,0x44,0x55,0x2c,0x20,0x30,0x78,0x36,0x39,0x32,0x37,0x32, + 0x37,0x34,0x45,0x55,0x2c,0x20,0x30,0x78,0x43,0x44,0x42,0x32,0x42,0x32,0x37,0x46,0x55,0x2c,0x20,0x30,0x78,0x39,0x46,0x37,0x35,0x37,0x35,0x45,0x41,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x31,0x42,0x30,0x39,0x30,0x39,0x31,0x32,0x55,0x2c,0x20,0x30,0x78,0x39,0x45,0x38,0x33,0x38,0x33,0x31,0x44,0x55,0x2c,0x20,0x30,0x78, + 0x37,0x34,0x32,0x43,0x32,0x43,0x35,0x38,0x55,0x2c,0x20,0x30,0x78,0x32,0x45,0x31,0x41,0x31,0x41,0x33,0x34,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x44, + 0x31,0x42,0x31,0x42,0x33,0x36,0x55,0x2c,0x20,0x30,0x78,0x42,0x32,0x36,0x45,0x36,0x45,0x44,0x43,0x55,0x2c,0x20,0x30,0x78,0x45,0x45,0x35,0x41,0x35,0x41,0x42,0x34, + 0x55,0x2c,0x20,0x30,0x78,0x46,0x42,0x41,0x30,0x41,0x30,0x35,0x42,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x46,0x36,0x35,0x32,0x35,0x32,0x41,0x34,0x55,0x2c, + 0x20,0x30,0x78,0x34,0x44,0x33,0x42,0x33,0x42,0x37,0x36,0x55,0x2c,0x20,0x30,0x78,0x36,0x31,0x44,0x36,0x44,0x36,0x42,0x37,0x55,0x2c,0x20,0x30,0x78,0x43,0x45,0x42, + 0x33,0x42,0x33,0x37,0x44,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x37,0x42,0x32,0x39,0x32,0x39,0x35,0x32,0x55,0x2c,0x20,0x30,0x78,0x33,0x45,0x45,0x33,0x45, + 0x33,0x44,0x44,0x55,0x2c,0x20,0x30,0x78,0x37,0x31,0x32,0x46,0x32,0x46,0x35,0x45,0x55,0x2c,0x20,0x30,0x78,0x39,0x37,0x38,0x34,0x38,0x34,0x31,0x33,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x46,0x35,0x35,0x33,0x35,0x33,0x41,0x36,0x55,0x2c,0x20,0x30,0x78,0x36,0x38,0x44,0x31,0x44,0x31,0x42,0x39,0x55,0x2c,0x20,0x30,0x78, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x55,0x2c,0x20,0x30,0x78,0x32,0x43,0x45,0x44,0x45,0x44,0x43,0x31,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x30, + 0x32,0x30,0x32,0x30,0x34,0x30,0x55,0x2c,0x20,0x30,0x78,0x31,0x46,0x46,0x43,0x46,0x43,0x45,0x33,0x55,0x2c,0x20,0x30,0x78,0x43,0x38,0x42,0x31,0x42,0x31,0x37,0x39, + 0x55,0x2c,0x20,0x30,0x78,0x45,0x44,0x35,0x42,0x35,0x42,0x42,0x36,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x45,0x36,0x41,0x36,0x41,0x44,0x34,0x55,0x2c, + 0x20,0x30,0x78,0x34,0x36,0x43,0x42,0x43,0x42,0x38,0x44,0x55,0x2c,0x20,0x30,0x78,0x44,0x39,0x42,0x45,0x42,0x45,0x36,0x37,0x55,0x2c,0x20,0x30,0x78,0x34,0x42,0x33, + 0x39,0x33,0x39,0x37,0x32,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x45,0x34,0x41,0x34,0x41,0x39,0x34,0x55,0x2c,0x20,0x30,0x78,0x44,0x34,0x34,0x43,0x34, + 0x43,0x39,0x38,0x55,0x2c,0x20,0x30,0x78,0x45,0x38,0x35,0x38,0x35,0x38,0x42,0x30,0x55,0x2c,0x20,0x30,0x78,0x34,0x41,0x43,0x46,0x43,0x46,0x38,0x35,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x42,0x44,0x30,0x44,0x30,0x42,0x42,0x55,0x2c,0x20,0x30,0x78,0x32,0x41,0x45,0x46,0x45,0x46,0x43,0x35,0x55,0x2c,0x20,0x30,0x78, + 0x45,0x35,0x41,0x41,0x41,0x41,0x34,0x46,0x55,0x2c,0x20,0x30,0x78,0x31,0x36,0x46,0x42,0x46,0x42,0x45,0x44,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x35, + 0x34,0x33,0x34,0x33,0x38,0x36,0x55,0x2c,0x20,0x30,0x78,0x44,0x37,0x34,0x44,0x34,0x44,0x39,0x41,0x55,0x2c,0x20,0x30,0x78,0x35,0x35,0x33,0x33,0x33,0x33,0x36,0x36, + 0x55,0x2c,0x20,0x30,0x78,0x39,0x34,0x38,0x35,0x38,0x35,0x31,0x31,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x46,0x34,0x35,0x34,0x35,0x38,0x41,0x55,0x2c, + 0x20,0x30,0x78,0x31,0x30,0x46,0x39,0x46,0x39,0x45,0x39,0x55,0x2c,0x20,0x30,0x78,0x30,0x36,0x30,0x32,0x30,0x32,0x30,0x34,0x55,0x2c,0x20,0x30,0x78,0x38,0x31,0x37, + 0x46,0x37,0x46,0x46,0x45,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x46,0x30,0x35,0x30,0x35,0x30,0x41,0x30,0x55,0x2c,0x20,0x30,0x78,0x34,0x34,0x33,0x43,0x33, + 0x43,0x37,0x38,0x55,0x2c,0x20,0x30,0x78,0x42,0x41,0x39,0x46,0x39,0x46,0x32,0x35,0x55,0x2c,0x20,0x30,0x78,0x45,0x33,0x41,0x38,0x41,0x38,0x34,0x42,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x46,0x33,0x35,0x31,0x35,0x31,0x41,0x32,0x55,0x2c,0x20,0x30,0x78,0x46,0x45,0x41,0x33,0x41,0x33,0x35,0x44,0x55,0x2c,0x20,0x30,0x78, + 0x43,0x30,0x34,0x30,0x34,0x30,0x38,0x30,0x55,0x2c,0x20,0x30,0x78,0x38,0x41,0x38,0x46,0x38,0x46,0x30,0x35,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x44, + 0x39,0x32,0x39,0x32,0x33,0x46,0x55,0x2c,0x20,0x30,0x78,0x42,0x43,0x39,0x44,0x39,0x44,0x32,0x31,0x55,0x2c,0x20,0x30,0x78,0x34,0x38,0x33,0x38,0x33,0x38,0x37,0x30, + 0x55,0x2c,0x20,0x30,0x78,0x30,0x34,0x46,0x35,0x46,0x35,0x46,0x31,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x46,0x42,0x43,0x42,0x43,0x36,0x33,0x55,0x2c, + 0x20,0x30,0x78,0x43,0x31,0x42,0x36,0x42,0x36,0x37,0x37,0x55,0x2c,0x20,0x30,0x78,0x37,0x35,0x44,0x41,0x44,0x41,0x41,0x46,0x55,0x2c,0x20,0x30,0x78,0x36,0x33,0x32, + 0x31,0x32,0x31,0x34,0x32,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x33,0x30,0x31,0x30,0x31,0x30,0x32,0x30,0x55,0x2c,0x20,0x30,0x78,0x31,0x41,0x46,0x46,0x46, + 0x46,0x45,0x35,0x55,0x2c,0x20,0x30,0x78,0x30,0x45,0x46,0x33,0x46,0x33,0x46,0x44,0x55,0x2c,0x20,0x30,0x78,0x36,0x44,0x44,0x32,0x44,0x32,0x42,0x46,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x34,0x43,0x43,0x44,0x43,0x44,0x38,0x31,0x55,0x2c,0x20,0x30,0x78,0x31,0x34,0x30,0x43,0x30,0x43,0x31,0x38,0x55,0x2c,0x20,0x30,0x78, + 0x33,0x35,0x31,0x33,0x31,0x33,0x32,0x36,0x55,0x2c,0x20,0x30,0x78,0x32,0x46,0x45,0x43,0x45,0x43,0x43,0x33,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x31, + 0x35,0x46,0x35,0x46,0x42,0x45,0x55,0x2c,0x20,0x30,0x78,0x41,0x32,0x39,0x37,0x39,0x37,0x33,0x35,0x55,0x2c,0x20,0x30,0x78,0x43,0x43,0x34,0x34,0x34,0x34,0x38,0x38, + 0x55,0x2c,0x20,0x30,0x78,0x33,0x39,0x31,0x37,0x31,0x37,0x32,0x45,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x37,0x43,0x34,0x43,0x34,0x39,0x33,0x55,0x2c, + 0x20,0x30,0x78,0x46,0x32,0x41,0x37,0x41,0x37,0x35,0x35,0x55,0x2c,0x20,0x30,0x78,0x38,0x32,0x37,0x45,0x37,0x45,0x46,0x43,0x55,0x2c,0x20,0x30,0x78,0x34,0x37,0x33, + 0x44,0x33,0x44,0x37,0x41,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x43,0x36,0x34,0x36,0x34,0x43,0x38,0x55,0x2c,0x20,0x30,0x78,0x45,0x37,0x35,0x44,0x35, + 0x44,0x42,0x41,0x55,0x2c,0x20,0x30,0x78,0x32,0x42,0x31,0x39,0x31,0x39,0x33,0x32,0x55,0x2c,0x20,0x30,0x78,0x39,0x35,0x37,0x33,0x37,0x33,0x45,0x36,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x30,0x36,0x30,0x36,0x30,0x43,0x30,0x55,0x2c,0x20,0x30,0x78,0x39,0x38,0x38,0x31,0x38,0x31,0x31,0x39,0x55,0x2c,0x20,0x30,0x78, + 0x44,0x31,0x34,0x46,0x34,0x46,0x39,0x45,0x55,0x2c,0x20,0x30,0x78,0x37,0x46,0x44,0x43,0x44,0x43,0x41,0x33,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x36, + 0x32,0x32,0x32,0x32,0x34,0x34,0x55,0x2c,0x20,0x30,0x78,0x37,0x45,0x32,0x41,0x32,0x41,0x35,0x34,0x55,0x2c,0x20,0x30,0x78,0x41,0x42,0x39,0x30,0x39,0x30,0x33,0x42, + 0x55,0x2c,0x20,0x30,0x78,0x38,0x33,0x38,0x38,0x38,0x38,0x30,0x42,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x41,0x34,0x36,0x34,0x36,0x38,0x43,0x55,0x2c, + 0x20,0x30,0x78,0x32,0x39,0x45,0x45,0x45,0x45,0x43,0x37,0x55,0x2c,0x20,0x30,0x78,0x44,0x33,0x42,0x38,0x42,0x38,0x36,0x42,0x55,0x2c,0x20,0x30,0x78,0x33,0x43,0x31, + 0x34,0x31,0x34,0x32,0x38,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x37,0x39,0x44,0x45,0x44,0x45,0x41,0x37,0x55,0x2c,0x20,0x30,0x78,0x45,0x32,0x35,0x45,0x35, + 0x45,0x42,0x43,0x55,0x2c,0x20,0x30,0x78,0x31,0x44,0x30,0x42,0x30,0x42,0x31,0x36,0x55,0x2c,0x20,0x30,0x78,0x37,0x36,0x44,0x42,0x44,0x42,0x41,0x44,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x33,0x42,0x45,0x30,0x45,0x30,0x44,0x42,0x55,0x2c,0x20,0x30,0x78,0x35,0x36,0x33,0x32,0x33,0x32,0x36,0x34,0x55,0x2c,0x20,0x30,0x78, + 0x34,0x45,0x33,0x41,0x33,0x41,0x37,0x34,0x55,0x2c,0x20,0x30,0x78,0x31,0x45,0x30,0x41,0x30,0x41,0x31,0x34,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x42, + 0x34,0x39,0x34,0x39,0x39,0x32,0x55,0x2c,0x20,0x30,0x78,0x30,0x41,0x30,0x36,0x30,0x36,0x30,0x43,0x55,0x2c,0x20,0x30,0x78,0x36,0x43,0x32,0x34,0x32,0x34,0x34,0x38, + 0x55,0x2c,0x20,0x30,0x78,0x45,0x34,0x35,0x43,0x35,0x43,0x42,0x38,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x44,0x43,0x32,0x43,0x32,0x39,0x46,0x55,0x2c, + 0x20,0x30,0x78,0x36,0x45,0x44,0x33,0x44,0x33,0x42,0x44,0x55,0x2c,0x20,0x30,0x78,0x45,0x46,0x41,0x43,0x41,0x43,0x34,0x33,0x55,0x2c,0x20,0x30,0x78,0x41,0x36,0x36, + 0x32,0x36,0x32,0x43,0x34,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x38,0x39,0x31,0x39,0x31,0x33,0x39,0x55,0x2c,0x20,0x30,0x78,0x41,0x34,0x39,0x35,0x39, + 0x35,0x33,0x31,0x55,0x2c,0x20,0x30,0x78,0x33,0x37,0x45,0x34,0x45,0x34,0x44,0x33,0x55,0x2c,0x20,0x30,0x78,0x38,0x42,0x37,0x39,0x37,0x39,0x46,0x32,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x33,0x32,0x45,0x37,0x45,0x37,0x44,0x35,0x55,0x2c,0x20,0x30,0x78,0x34,0x33,0x43,0x38,0x43,0x38,0x38,0x42,0x55,0x2c,0x20,0x30,0x78, + 0x35,0x39,0x33,0x37,0x33,0x37,0x36,0x45,0x55,0x2c,0x20,0x30,0x78,0x42,0x37,0x36,0x44,0x36,0x44,0x44,0x41,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x43, + 0x38,0x44,0x38,0x44,0x30,0x31,0x55,0x2c,0x20,0x30,0x78,0x36,0x34,0x44,0x35,0x44,0x35,0x42,0x31,0x55,0x2c,0x20,0x30,0x78,0x44,0x32,0x34,0x45,0x34,0x45,0x39,0x43, + 0x55,0x2c,0x20,0x30,0x78,0x45,0x30,0x41,0x39,0x41,0x39,0x34,0x39,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x34,0x36,0x43,0x36,0x43,0x44,0x38,0x55,0x2c, + 0x20,0x30,0x78,0x46,0x41,0x35,0x36,0x35,0x36,0x41,0x43,0x55,0x2c,0x20,0x30,0x78,0x30,0x37,0x46,0x34,0x46,0x34,0x46,0x33,0x55,0x2c,0x20,0x30,0x78,0x32,0x35,0x45, + 0x41,0x45,0x41,0x43,0x46,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x46,0x36,0x35,0x36,0x35,0x43,0x41,0x55,0x2c,0x20,0x30,0x78,0x38,0x45,0x37,0x41,0x37, + 0x41,0x46,0x34,0x55,0x2c,0x20,0x30,0x78,0x45,0x39,0x41,0x45,0x41,0x45,0x34,0x37,0x55,0x2c,0x20,0x30,0x78,0x31,0x38,0x30,0x38,0x30,0x38,0x31,0x30,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x35,0x42,0x41,0x42,0x41,0x36,0x46,0x55,0x2c,0x20,0x30,0x78,0x38,0x38,0x37,0x38,0x37,0x38,0x46,0x30,0x55,0x2c,0x20,0x30,0x78, + 0x36,0x46,0x32,0x35,0x32,0x35,0x34,0x41,0x55,0x2c,0x20,0x30,0x78,0x37,0x32,0x32,0x45,0x32,0x45,0x35,0x43,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x34, + 0x31,0x43,0x31,0x43,0x33,0x38,0x55,0x2c,0x20,0x30,0x78,0x46,0x31,0x41,0x36,0x41,0x36,0x35,0x37,0x55,0x2c,0x20,0x30,0x78,0x43,0x37,0x42,0x34,0x42,0x34,0x37,0x33, + 0x55,0x2c,0x20,0x30,0x78,0x35,0x31,0x43,0x36,0x43,0x36,0x39,0x37,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x32,0x33,0x45,0x38,0x45,0x38,0x43,0x42,0x55,0x2c, + 0x20,0x30,0x78,0x37,0x43,0x44,0x44,0x44,0x44,0x41,0x31,0x55,0x2c,0x20,0x30,0x78,0x39,0x43,0x37,0x34,0x37,0x34,0x45,0x38,0x55,0x2c,0x20,0x30,0x78,0x32,0x31,0x31, + 0x46,0x31,0x46,0x33,0x45,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x44,0x34,0x42,0x34,0x42,0x39,0x36,0x55,0x2c,0x20,0x30,0x78,0x44,0x43,0x42,0x44,0x42, + 0x44,0x36,0x31,0x55,0x2c,0x20,0x30,0x78,0x38,0x36,0x38,0x42,0x38,0x42,0x30,0x44,0x55,0x2c,0x20,0x30,0x78,0x38,0x35,0x38,0x41,0x38,0x41,0x30,0x46,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x39,0x30,0x37,0x30,0x37,0x30,0x45,0x30,0x55,0x2c,0x20,0x30,0x78,0x34,0x32,0x33,0x45,0x33,0x45,0x37,0x43,0x55,0x2c,0x20,0x30,0x78, + 0x43,0x34,0x42,0x35,0x42,0x35,0x37,0x31,0x55,0x2c,0x20,0x30,0x78,0x41,0x41,0x36,0x36,0x36,0x36,0x43,0x43,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x38, + 0x34,0x38,0x34,0x38,0x39,0x30,0x55,0x2c,0x20,0x30,0x78,0x30,0x35,0x30,0x33,0x30,0x33,0x30,0x36,0x55,0x2c,0x20,0x30,0x78,0x30,0x31,0x46,0x36,0x46,0x36,0x46,0x37, + 0x55,0x2c,0x20,0x30,0x78,0x31,0x32,0x30,0x45,0x30,0x45,0x31,0x43,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x41,0x33,0x36,0x31,0x36,0x31,0x43,0x32,0x55,0x2c, + 0x20,0x30,0x78,0x35,0x46,0x33,0x35,0x33,0x35,0x36,0x41,0x55,0x2c,0x20,0x30,0x78,0x46,0x39,0x35,0x37,0x35,0x37,0x41,0x45,0x55,0x2c,0x20,0x30,0x78,0x44,0x30,0x42, + 0x39,0x42,0x39,0x36,0x39,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x39,0x31,0x38,0x36,0x38,0x36,0x31,0x37,0x55,0x2c,0x20,0x30,0x78,0x35,0x38,0x43,0x31,0x43, + 0x31,0x39,0x39,0x55,0x2c,0x20,0x30,0x78,0x32,0x37,0x31,0x44,0x31,0x44,0x33,0x41,0x55,0x2c,0x20,0x30,0x78,0x42,0x39,0x39,0x45,0x39,0x45,0x32,0x37,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x33,0x38,0x45,0x31,0x45,0x31,0x44,0x39,0x55,0x2c,0x20,0x30,0x78,0x31,0x33,0x46,0x38,0x46,0x38,0x45,0x42,0x55,0x2c,0x20,0x30,0x78, + 0x42,0x33,0x39,0x38,0x39,0x38,0x32,0x42,0x55,0x2c,0x20,0x30,0x78,0x33,0x33,0x31,0x31,0x31,0x31,0x32,0x32,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x42, + 0x36,0x39,0x36,0x39,0x44,0x32,0x55,0x2c,0x20,0x30,0x78,0x37,0x30,0x44,0x39,0x44,0x39,0x41,0x39,0x55,0x2c,0x20,0x30,0x78,0x38,0x39,0x38,0x45,0x38,0x45,0x30,0x37, + 0x55,0x2c,0x20,0x30,0x78,0x41,0x37,0x39,0x34,0x39,0x34,0x33,0x33,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x36,0x39,0x42,0x39,0x42,0x32,0x44,0x55,0x2c, + 0x20,0x30,0x78,0x32,0x32,0x31,0x45,0x31,0x45,0x33,0x43,0x55,0x2c,0x20,0x30,0x78,0x39,0x32,0x38,0x37,0x38,0x37,0x31,0x35,0x55,0x2c,0x20,0x30,0x78,0x32,0x30,0x45, + 0x39,0x45,0x39,0x43,0x39,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x34,0x39,0x43,0x45,0x43,0x45,0x38,0x37,0x55,0x2c,0x20,0x30,0x78,0x46,0x46,0x35,0x35,0x35, + 0x35,0x41,0x41,0x55,0x2c,0x20,0x30,0x78,0x37,0x38,0x32,0x38,0x32,0x38,0x35,0x30,0x55,0x2c,0x20,0x30,0x78,0x37,0x41,0x44,0x46,0x44,0x46,0x41,0x35,0x55,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x46,0x38,0x43,0x38,0x43,0x30,0x33,0x55,0x2c,0x20,0x30,0x78,0x46,0x38,0x41,0x31,0x41,0x31,0x35,0x39,0x55,0x2c,0x20,0x30,0x78, + 0x38,0x30,0x38,0x39,0x38,0x39,0x30,0x39,0x55,0x2c,0x20,0x30,0x78,0x31,0x37,0x30,0x44,0x30,0x44,0x31,0x41,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x41, + 0x42,0x46,0x42,0x46,0x36,0x35,0x55,0x2c,0x20,0x30,0x78,0x33,0x31,0x45,0x36,0x45,0x36,0x44,0x37,0x55,0x2c,0x20,0x30,0x78,0x43,0x36,0x34,0x32,0x34,0x32,0x38,0x34, + 0x55,0x2c,0x20,0x30,0x78,0x42,0x38,0x36,0x38,0x36,0x38,0x44,0x30,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x33,0x34,0x31,0x34,0x31,0x38,0x32,0x55,0x2c, + 0x20,0x30,0x78,0x42,0x30,0x39,0x39,0x39,0x39,0x32,0x39,0x55,0x2c,0x20,0x30,0x78,0x37,0x37,0x32,0x44,0x32,0x44,0x35,0x41,0x55,0x2c,0x20,0x30,0x78,0x31,0x31,0x30, + 0x46,0x30,0x46,0x31,0x45,0x55,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x42,0x42,0x30,0x42,0x30,0x37,0x42,0x55,0x2c,0x20,0x30,0x78,0x46,0x43,0x35,0x34,0x35, + 0x34,0x41,0x38,0x55,0x2c,0x20,0x30,0x78,0x44,0x36,0x42,0x42,0x42,0x42,0x36,0x44,0x55,0x2c,0x20,0x30,0x78,0x33,0x41,0x31,0x36,0x31,0x36,0x32,0x43,0x55,0x0a,0x7d, + 0x3b,0x0a,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x42,0x59,0x54,0x45,0x28,0x78,0x2c,0x20,0x79,0x29,0x20,0x28,0x78,0x6d,0x72,0x69,0x67,0x5f,0x61,0x6d,0x64, + 0x5f,0x62,0x66,0x65,0x28,0x28,0x78,0x29,0x2c,0x20,0x28,0x79,0x29,0x20,0x3c,0x3c,0x20,0x33,0x55,0x2c,0x20,0x38,0x55,0x29,0x29,0x0a,0x0a,0x23,0x69,0x66,0x20,0x28, + 0x41,0x4c,0x47,0x4f,0x20,0x3d,0x3d,0x20,0x41,0x4c,0x47,0x4f,0x5f,0x43,0x4e,0x5f,0x48,0x45,0x41,0x56,0x59,0x5f,0x54,0x55,0x42,0x45,0x29,0x0a,0x69,0x6e,0x6c,0x69, + 0x6e,0x65,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x5f,0x62,0x69,0x74,0x74,0x75,0x62,0x65,0x32,0x28,0x63,0x6f,0x6e,0x73, + 0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x30,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f, + 0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x31,0x2c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x78,0x2c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x6b, + 0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x78,0x20,0x3d,0x20,0x7e,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x2e,0x73,0x30,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30, + 0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x30,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x31, + 0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x32,0x2c,0x20,0x32, + 0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x33,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x78,0x2e,0x73,0x30,0x20,0x5e,0x3d,0x20,0x6b,0x2e,0x73,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x2e,0x73,0x31,0x20,0x5e,0x3d,0x20,0x41,0x45, + 0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x31,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e, + 0x73,0x32,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x33,0x2c, + 0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x30,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x78,0x2e,0x73,0x31,0x20,0x5e,0x3d,0x20,0x6b,0x2e,0x73,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x2e,0x73,0x32,0x20,0x5e,0x3d,0x20, + 0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x32,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28, + 0x78,0x2e,0x73,0x33,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73, + 0x30,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x31,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36, + 0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x78,0x2e,0x73,0x32,0x20,0x5e,0x3d,0x20,0x6b,0x2e,0x73,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x2e,0x73,0x33,0x20,0x5e, + 0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x33,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54, + 0x45,0x28,0x78,0x2e,0x73,0x30,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x78, + 0x2e,0x73,0x31,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x78,0x2e,0x73,0x32,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20, + 0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x3b,0x0a,0x7d,0x0a,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x75,0x69, + 0x6e,0x74,0x34,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x28,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74, + 0x20,0x2a,0x41,0x45,0x53,0x30,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x31, + 0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x32,0x2c,0x20,0x63,0x6f,0x6e,0x73, + 0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x33,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74, + 0x34,0x20,0x58,0x2c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x6b,0x65,0x79,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,0x30,0x20,0x5e,0x3d,0x20, + 0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28, + 0x58,0x2e,0x73,0x31,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x32,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x32,0x29,0x5d,0x20, + 0x5e,0x20,0x41,0x45,0x53,0x33,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x33,0x29,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73, + 0x31,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b, + 0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x32,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c, + 0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x33,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x33,0x29,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x6b,0x65,0x79,0x2e,0x73,0x32,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20, + 0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x32,0x5b,0x42,0x59,0x54,0x45,0x28, + 0x58,0x2e,0x73,0x30,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x33,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x33,0x29,0x5d,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,0x33,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x30, + 0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x32,0x5b, + 0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x33,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c, + 0x20,0x33,0x29,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x65,0x79,0x3b,0x0a,0x7d,0x0a,0x0a,0x75,0x69,0x6e,0x74,0x34,0x20, + 0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x5f,0x54,0x77,0x6f,0x5f,0x54,0x61,0x62,0x6c,0x65,0x73,0x28,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63, + 0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x41,0x45,0x53,0x30,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e, + 0x74,0x20,0x2a,0x41,0x45,0x53,0x31,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x58,0x2c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x6b,0x65, + 0x79,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,0x30,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73, + 0x30,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72, + 0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31, + 0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73, + 0x31,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b, + 0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54, + 0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x33,0x29, + 0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x2e,0x73,0x32,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45, + 0x28,0x58,0x2e,0x73,0x32,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x31,0x29,0x5d, + 0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20, + 0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6b, + 0x65,0x79,0x2e,0x73,0x33,0x20,0x5e,0x3d,0x20,0x41,0x45,0x53,0x30,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x33,0x2c,0x20,0x30,0x29,0x5d,0x20,0x5e,0x20,0x41, + 0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x30,0x2c,0x20,0x31,0x29,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x41,0x45,0x53,0x30, + 0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x31,0x2c,0x20,0x32,0x29,0x5d,0x20,0x5e,0x20,0x41,0x45,0x53,0x31,0x5b,0x42,0x59,0x54,0x45,0x28,0x58,0x2e,0x73,0x32, + 0x2c,0x20,0x33,0x29,0x5d,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6b,0x65,0x79,0x3b,0x0a,0x7d,0x0a, + 0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x63,0x68,0x61,0x72,0x20, + 0x72,0x63,0x6f,0x6e,0x5b,0x38,0x5d,0x20,0x3d,0x20,0x7b,0x20,0x30,0x78,0x38,0x64,0x2c,0x20,0x30,0x78,0x30,0x31,0x2c,0x20,0x30,0x78,0x30,0x32,0x2c,0x20,0x30,0x78, + 0x30,0x34,0x2c,0x20,0x30,0x78,0x30,0x38,0x2c,0x20,0x30,0x78,0x31,0x30,0x2c,0x20,0x30,0x78,0x32,0x30,0x2c,0x20,0x30,0x78,0x34,0x30,0x20,0x7d,0x3b,0x0a,0x0a,0x0a, + 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x63,0x68,0x61,0x72,0x20,0x73,0x62, + 0x6f,0x78,0x5b,0x32,0x35,0x36,0x5d,0x20,0x3d,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x33,0x2c,0x20,0x30,0x78,0x37,0x43,0x2c,0x20,0x30,0x78,0x37,0x37, + 0x2c,0x20,0x30,0x78,0x37,0x42,0x2c,0x20,0x30,0x78,0x46,0x32,0x2c,0x20,0x30,0x78,0x36,0x42,0x2c,0x20,0x30,0x78,0x36,0x46,0x2c,0x20,0x30,0x78,0x43,0x35,0x2c,0x20, + 0x30,0x78,0x33,0x30,0x2c,0x20,0x30,0x78,0x30,0x31,0x2c,0x20,0x30,0x78,0x36,0x37,0x2c,0x20,0x30,0x78,0x32,0x42,0x2c,0x20,0x30,0x78,0x46,0x45,0x2c,0x20,0x30,0x78, + 0x44,0x37,0x2c,0x20,0x30,0x78,0x41,0x42,0x2c,0x20,0x30,0x78,0x37,0x36,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x41,0x2c,0x20,0x30,0x78,0x38,0x32,0x2c,0x20, + 0x30,0x78,0x43,0x39,0x2c,0x20,0x30,0x78,0x37,0x44,0x2c,0x20,0x30,0x78,0x46,0x41,0x2c,0x20,0x30,0x78,0x35,0x39,0x2c,0x20,0x30,0x78,0x34,0x37,0x2c,0x20,0x30,0x78, + 0x46,0x30,0x2c,0x20,0x30,0x78,0x41,0x44,0x2c,0x20,0x30,0x78,0x44,0x34,0x2c,0x20,0x30,0x78,0x41,0x32,0x2c,0x20,0x30,0x78,0x41,0x46,0x2c,0x20,0x30,0x78,0x39,0x43, + 0x2c,0x20,0x30,0x78,0x41,0x34,0x2c,0x20,0x30,0x78,0x37,0x32,0x2c,0x20,0x30,0x78,0x43,0x30,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x42,0x37,0x2c,0x20,0x30,0x78, + 0x46,0x44,0x2c,0x20,0x30,0x78,0x39,0x33,0x2c,0x20,0x30,0x78,0x32,0x36,0x2c,0x20,0x30,0x78,0x33,0x36,0x2c,0x20,0x30,0x78,0x33,0x46,0x2c,0x20,0x30,0x78,0x46,0x37, + 0x2c,0x20,0x30,0x78,0x43,0x43,0x2c,0x20,0x30,0x78,0x33,0x34,0x2c,0x20,0x30,0x78,0x41,0x35,0x2c,0x20,0x30,0x78,0x45,0x35,0x2c,0x20,0x30,0x78,0x46,0x31,0x2c,0x20, + 0x30,0x78,0x37,0x31,0x2c,0x20,0x30,0x78,0x44,0x38,0x2c,0x20,0x30,0x78,0x33,0x31,0x2c,0x20,0x30,0x78,0x31,0x35,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x34, + 0x2c,0x20,0x30,0x78,0x43,0x37,0x2c,0x20,0x30,0x78,0x32,0x33,0x2c,0x20,0x30,0x78,0x43,0x33,0x2c,0x20,0x30,0x78,0x31,0x38,0x2c,0x20,0x30,0x78,0x39,0x36,0x2c,0x20, + 0x30,0x78,0x30,0x35,0x2c,0x20,0x30,0x78,0x39,0x41,0x2c,0x20,0x30,0x78,0x30,0x37,0x2c,0x20,0x30,0x78,0x31,0x32,0x2c,0x20,0x30,0x78,0x38,0x30,0x2c,0x20,0x30,0x78, + 0x45,0x32,0x2c,0x20,0x30,0x78,0x45,0x42,0x2c,0x20,0x30,0x78,0x32,0x37,0x2c,0x20,0x30,0x78,0x42,0x32,0x2c,0x20,0x30,0x78,0x37,0x35,0x2c,0x0a,0x20,0x20,0x20,0x20, + 0x30,0x78,0x30,0x39,0x2c,0x20,0x30,0x78,0x38,0x33,0x2c,0x20,0x30,0x78,0x32,0x43,0x2c,0x20,0x30,0x78,0x31,0x41,0x2c,0x20,0x30,0x78,0x31,0x42,0x2c,0x20,0x30,0x78, + 0x36,0x45,0x2c,0x20,0x30,0x78,0x35,0x41,0x2c,0x20,0x30,0x78,0x41,0x30,0x2c,0x20,0x30,0x78,0x35,0x32,0x2c,0x20,0x30,0x78,0x33,0x42,0x2c,0x20,0x30,0x78,0x44,0x36, + 0x2c,0x20,0x30,0x78,0x42,0x33,0x2c,0x20,0x30,0x78,0x32,0x39,0x2c,0x20,0x30,0x78,0x45,0x33,0x2c,0x20,0x30,0x78,0x32,0x46,0x2c,0x20,0x30,0x78,0x38,0x34,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x33,0x2c,0x20,0x30,0x78,0x44,0x31,0x2c,0x20,0x30,0x78,0x30,0x30,0x2c,0x20,0x30,0x78,0x45,0x44,0x2c,0x20,0x30,0x78,0x32,0x30, + 0x2c,0x20,0x30,0x78,0x46,0x43,0x2c,0x20,0x30,0x78,0x42,0x31,0x2c,0x20,0x30,0x78,0x35,0x42,0x2c,0x20,0x30,0x78,0x36,0x41,0x2c,0x20,0x30,0x78,0x43,0x42,0x2c,0x20, + 0x30,0x78,0x42,0x45,0x2c,0x20,0x30,0x78,0x33,0x39,0x2c,0x20,0x30,0x78,0x34,0x41,0x2c,0x20,0x30,0x78,0x34,0x43,0x2c,0x20,0x30,0x78,0x35,0x38,0x2c,0x20,0x30,0x78, + 0x43,0x46,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x44,0x30,0x2c,0x20,0x30,0x78,0x45,0x46,0x2c,0x20,0x30,0x78,0x41,0x41,0x2c,0x20,0x30,0x78,0x46,0x42,0x2c,0x20, + 0x30,0x78,0x34,0x33,0x2c,0x20,0x30,0x78,0x34,0x44,0x2c,0x20,0x30,0x78,0x33,0x33,0x2c,0x20,0x30,0x78,0x38,0x35,0x2c,0x20,0x30,0x78,0x34,0x35,0x2c,0x20,0x30,0x78, + 0x46,0x39,0x2c,0x20,0x30,0x78,0x30,0x32,0x2c,0x20,0x30,0x78,0x37,0x46,0x2c,0x20,0x30,0x78,0x35,0x30,0x2c,0x20,0x30,0x78,0x33,0x43,0x2c,0x20,0x30,0x78,0x39,0x46, + 0x2c,0x20,0x30,0x78,0x41,0x38,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x35,0x31,0x2c,0x20,0x30,0x78,0x41,0x33,0x2c,0x20,0x30,0x78,0x34,0x30,0x2c,0x20,0x30,0x78, + 0x38,0x46,0x2c,0x20,0x30,0x78,0x39,0x32,0x2c,0x20,0x30,0x78,0x39,0x44,0x2c,0x20,0x30,0x78,0x33,0x38,0x2c,0x20,0x30,0x78,0x46,0x35,0x2c,0x20,0x30,0x78,0x42,0x43, + 0x2c,0x20,0x30,0x78,0x42,0x36,0x2c,0x20,0x30,0x78,0x44,0x41,0x2c,0x20,0x30,0x78,0x32,0x31,0x2c,0x20,0x30,0x78,0x31,0x30,0x2c,0x20,0x30,0x78,0x46,0x46,0x2c,0x20, + 0x30,0x78,0x46,0x33,0x2c,0x20,0x30,0x78,0x44,0x32,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x43,0x44,0x2c,0x20,0x30,0x78,0x30,0x43,0x2c,0x20,0x30,0x78,0x31,0x33, + 0x2c,0x20,0x30,0x78,0x45,0x43,0x2c,0x20,0x30,0x78,0x35,0x46,0x2c,0x20,0x30,0x78,0x39,0x37,0x2c,0x20,0x30,0x78,0x34,0x34,0x2c,0x20,0x30,0x78,0x31,0x37,0x2c,0x20, + 0x30,0x78,0x43,0x34,0x2c,0x20,0x30,0x78,0x41,0x37,0x2c,0x20,0x30,0x78,0x37,0x45,0x2c,0x20,0x30,0x78,0x33,0x44,0x2c,0x20,0x30,0x78,0x36,0x34,0x2c,0x20,0x30,0x78, + 0x35,0x44,0x2c,0x20,0x30,0x78,0x31,0x39,0x2c,0x20,0x30,0x78,0x37,0x33,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x36,0x30,0x2c,0x20,0x30,0x78,0x38,0x31,0x2c,0x20, + 0x30,0x78,0x34,0x46,0x2c,0x20,0x30,0x78,0x44,0x43,0x2c,0x20,0x30,0x78,0x32,0x32,0x2c,0x20,0x30,0x78,0x32,0x41,0x2c,0x20,0x30,0x78,0x39,0x30,0x2c,0x20,0x30,0x78, + 0x38,0x38,0x2c,0x20,0x30,0x78,0x34,0x36,0x2c,0x20,0x30,0x78,0x45,0x45,0x2c,0x20,0x30,0x78,0x42,0x38,0x2c,0x20,0x30,0x78,0x31,0x34,0x2c,0x20,0x30,0x78,0x44,0x45, + 0x2c,0x20,0x30,0x78,0x35,0x45,0x2c,0x20,0x30,0x78,0x30,0x42,0x2c,0x20,0x30,0x78,0x44,0x42,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x30,0x2c,0x20,0x30,0x78, + 0x33,0x32,0x2c,0x20,0x30,0x78,0x33,0x41,0x2c,0x20,0x30,0x78,0x30,0x41,0x2c,0x20,0x30,0x78,0x34,0x39,0x2c,0x20,0x30,0x78,0x30,0x36,0x2c,0x20,0x30,0x78,0x32,0x34, + 0x2c,0x20,0x30,0x78,0x35,0x43,0x2c,0x20,0x30,0x78,0x43,0x32,0x2c,0x20,0x30,0x78,0x44,0x33,0x2c,0x20,0x30,0x78,0x41,0x43,0x2c,0x20,0x30,0x78,0x36,0x32,0x2c,0x20, + 0x30,0x78,0x39,0x31,0x2c,0x20,0x30,0x78,0x39,0x35,0x2c,0x20,0x30,0x78,0x45,0x34,0x2c,0x20,0x30,0x78,0x37,0x39,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x37, + 0x2c,0x20,0x30,0x78,0x43,0x38,0x2c,0x20,0x30,0x78,0x33,0x37,0x2c,0x20,0x30,0x78,0x36,0x44,0x2c,0x20,0x30,0x78,0x38,0x44,0x2c,0x20,0x30,0x78,0x44,0x35,0x2c,0x20, + 0x30,0x78,0x34,0x45,0x2c,0x20,0x30,0x78,0x41,0x39,0x2c,0x20,0x30,0x78,0x36,0x43,0x2c,0x20,0x30,0x78,0x35,0x36,0x2c,0x20,0x30,0x78,0x46,0x34,0x2c,0x20,0x30,0x78, + 0x45,0x41,0x2c,0x20,0x30,0x78,0x36,0x35,0x2c,0x20,0x30,0x78,0x37,0x41,0x2c,0x20,0x30,0x78,0x41,0x45,0x2c,0x20,0x30,0x78,0x30,0x38,0x2c,0x0a,0x20,0x20,0x20,0x20, + 0x30,0x78,0x42,0x41,0x2c,0x20,0x30,0x78,0x37,0x38,0x2c,0x20,0x30,0x78,0x32,0x35,0x2c,0x20,0x30,0x78,0x32,0x45,0x2c,0x20,0x30,0x78,0x31,0x43,0x2c,0x20,0x30,0x78, + 0x41,0x36,0x2c,0x20,0x30,0x78,0x42,0x34,0x2c,0x20,0x30,0x78,0x43,0x36,0x2c,0x20,0x30,0x78,0x45,0x38,0x2c,0x20,0x30,0x78,0x44,0x44,0x2c,0x20,0x30,0x78,0x37,0x34, + 0x2c,0x20,0x30,0x78,0x31,0x46,0x2c,0x20,0x30,0x78,0x34,0x42,0x2c,0x20,0x30,0x78,0x42,0x44,0x2c,0x20,0x30,0x78,0x38,0x42,0x2c,0x20,0x30,0x78,0x38,0x41,0x2c,0x0a, + 0x20,0x20,0x20,0x20,0x30,0x78,0x37,0x30,0x2c,0x20,0x30,0x78,0x33,0x45,0x2c,0x20,0x30,0x78,0x42,0x35,0x2c,0x20,0x30,0x78,0x36,0x36,0x2c,0x20,0x30,0x78,0x34,0x38, + 0x2c,0x20,0x30,0x78,0x30,0x33,0x2c,0x20,0x30,0x78,0x46,0x36,0x2c,0x20,0x30,0x78,0x30,0x45,0x2c,0x20,0x30,0x78,0x36,0x31,0x2c,0x20,0x30,0x78,0x33,0x35,0x2c,0x20, + 0x30,0x78,0x35,0x37,0x2c,0x20,0x30,0x78,0x42,0x39,0x2c,0x20,0x30,0x78,0x38,0x36,0x2c,0x20,0x30,0x78,0x43,0x31,0x2c,0x20,0x30,0x78,0x31,0x44,0x2c,0x20,0x30,0x78, + 0x39,0x45,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x45,0x31,0x2c,0x20,0x30,0x78,0x46,0x38,0x2c,0x20,0x30,0x78,0x39,0x38,0x2c,0x20,0x30,0x78,0x31,0x31,0x2c,0x20, + 0x30,0x78,0x36,0x39,0x2c,0x20,0x30,0x78,0x44,0x39,0x2c,0x20,0x30,0x78,0x38,0x45,0x2c,0x20,0x30,0x78,0x39,0x34,0x2c,0x20,0x30,0x78,0x39,0x42,0x2c,0x20,0x30,0x78, + 0x31,0x45,0x2c,0x20,0x30,0x78,0x38,0x37,0x2c,0x20,0x30,0x78,0x45,0x39,0x2c,0x20,0x30,0x78,0x43,0x45,0x2c,0x20,0x30,0x78,0x35,0x35,0x2c,0x20,0x30,0x78,0x32,0x38, + 0x2c,0x20,0x30,0x78,0x44,0x46,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x43,0x2c,0x20,0x30,0x78,0x41,0x31,0x2c,0x20,0x30,0x78,0x38,0x39,0x2c,0x20,0x30,0x78, + 0x30,0x44,0x2c,0x20,0x30,0x78,0x42,0x46,0x2c,0x20,0x30,0x78,0x45,0x36,0x2c,0x20,0x30,0x78,0x34,0x32,0x2c,0x20,0x30,0x78,0x36,0x38,0x2c,0x20,0x30,0x78,0x34,0x31, + 0x2c,0x20,0x30,0x78,0x39,0x39,0x2c,0x20,0x30,0x78,0x32,0x44,0x2c,0x20,0x30,0x78,0x30,0x46,0x2c,0x20,0x30,0x78,0x42,0x30,0x2c,0x20,0x30,0x78,0x35,0x34,0x2c,0x20, + 0x30,0x78,0x42,0x42,0x2c,0x20,0x30,0x78,0x31,0x36,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x53,0x75,0x62,0x57,0x6f,0x72,0x64,0x28, + 0x69,0x6e,0x77,0x29,0x20,0x28,0x28,0x73,0x62,0x6f,0x78,0x5b,0x42,0x59,0x54,0x45,0x28,0x69,0x6e,0x77,0x2c,0x20,0x33,0x29,0x5d,0x20,0x3c,0x3c,0x20,0x32,0x34,0x29, + 0x20,0x7c,0x20,0x28,0x73,0x62,0x6f,0x78,0x5b,0x42,0x59,0x54,0x45,0x28,0x69,0x6e,0x77,0x2c,0x20,0x32,0x29,0x5d,0x20,0x3c,0x3c,0x20,0x31,0x36,0x29,0x20,0x7c,0x20, + 0x28,0x73,0x62,0x6f,0x78,0x5b,0x42,0x59,0x54,0x45,0x28,0x69,0x6e,0x77,0x2c,0x20,0x31,0x29,0x5d,0x20,0x3c,0x3c,0x20,0x38,0x29,0x20,0x7c,0x20,0x73,0x62,0x6f,0x78, + 0x5b,0x42,0x59,0x54,0x45,0x28,0x69,0x6e,0x77,0x2c,0x20,0x30,0x29,0x5d,0x29,0x0a,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x41,0x45,0x53,0x45,0x78,0x70,0x61,0x6e,0x64, + 0x4b,0x65,0x79,0x32,0x35,0x36,0x28,0x75,0x69,0x6e,0x74,0x20,0x2a,0x6b,0x65,0x79,0x62,0x75,0x66,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x23,0x70,0x72, + 0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x34,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x75,0x69,0x6e,0x74,0x20,0x63,0x20,0x3d,0x20, + 0x38,0x2c,0x20,0x69,0x20,0x3d,0x20,0x31,0x3b,0x20,0x63,0x20,0x3c,0x20,0x34,0x30,0x3b,0x20,0x2b,0x2b,0x63,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x2f,0x2f,0x20,0x46,0x6f,0x72,0x20,0x32,0x35,0x36,0x2d,0x62,0x69,0x74,0x20,0x6b,0x65,0x79,0x73,0x2c,0x20,0x61,0x6e,0x20,0x73,0x62,0x6f,0x78,0x20,0x70,0x65, + 0x72,0x6d,0x75,0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x69,0x73,0x20,0x64,0x6f,0x6e,0x65,0x20,0x65,0x76,0x65,0x72,0x79,0x20,0x6f,0x74,0x68,0x65,0x72,0x20,0x34,0x74, + 0x68,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x65,0x64,0x2c,0x20,0x41,0x4e,0x44,0x20,0x65,0x76,0x65,0x72,0x79,0x20,0x38,0x74,0x68,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x74,0x20,0x3d,0x20,0x28,0x28,0x21,0x28,0x63,0x20,0x26,0x20,0x37,0x29,0x29,0x20,0x7c,0x7c,0x20, + 0x28,0x28,0x63,0x20,0x26,0x20,0x37,0x29,0x20,0x3d,0x3d,0x20,0x34,0x29,0x29,0x20,0x3f,0x20,0x53,0x75,0x62,0x57,0x6f,0x72,0x64,0x28,0x6b,0x65,0x79,0x62,0x75,0x66, + 0x5b,0x63,0x20,0x2d,0x20,0x31,0x5d,0x29,0x20,0x3a,0x20,0x6b,0x65,0x79,0x62,0x75,0x66,0x5b,0x63,0x20,0x2d,0x20,0x31,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x2f,0x2f,0x20,0x49,0x66,0x20,0x74,0x68,0x65,0x20,0x75,0x69,0x6e,0x74,0x20,0x77,0x65,0x27,0x72,0x65,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x69, + 0x6e,0x67,0x20,0x68,0x61,0x73,0x20,0x61,0x6e,0x20,0x69,0x6e,0x64,0x65,0x78,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x61,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70, + 0x6c,0x65,0x20,0x6f,0x66,0x20,0x38,0x2c,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x20,0x61,0x6e,0x64,0x20,0x58,0x4f,0x52,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65, + 0x20,0x72,0x6f,0x75,0x6e,0x64,0x20,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x74,0x68,0x65,0x6e, + 0x20,0x58,0x4f,0x52,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x74,0x68,0x20,0x70,0x72,0x65,0x76,0x69,0x6f,0x75,0x73,0x6c,0x79,0x20,0x67,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x65,0x64,0x20,0x75,0x69,0x6e,0x74,0x2e,0x20,0x49,0x66,0x20,0x69,0x74,0x27,0x73,0x20,0x34,0x20,0x61,0x66,0x74,0x65,0x72,0x20,0x61,0x20,0x6d,0x75,0x6c,0x74, + 0x69,0x70,0x6c,0x65,0x20,0x6f,0x66,0x20,0x38,0x2c,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x74,0x68,0x65,0x20,0x73,0x62,0x6f,0x78,0x20,0x70,0x65,0x72,0x6d,0x75,0x74,0x61, + 0x74,0x69,0x6f,0x6e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x69,0x73,0x20,0x64,0x6f,0x6e,0x65,0x2c,0x20,0x66,0x6f,0x6c,0x6c,0x6f,0x77,0x65, + 0x64,0x20,0x62,0x79,0x20,0x74,0x68,0x65,0x20,0x58,0x4f,0x52,0x2e,0x20,0x49,0x66,0x20,0x6e,0x65,0x69,0x74,0x68,0x65,0x72,0x20,0x61,0x72,0x65,0x20,0x74,0x72,0x75, + 0x65,0x2c,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x74,0x68,0x65,0x20,0x58,0x4f,0x52,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x65,0x76,0x69,0x6f,0x75, + 0x73,0x6c,0x79,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x65,0x64,0x20,0x75,0x69,0x6e,0x74,0x20,0x69,0x73,0x20,0x64,0x6f,0x6e,0x65,0x2e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x6b,0x65,0x79,0x62,0x75,0x66,0x5b,0x63,0x5d,0x20,0x3d,0x20,0x6b,0x65,0x79,0x62,0x75,0x66,0x5b,0x63,0x20,0x2d,0x20,0x38,0x5d,0x20,0x5e,0x20, + 0x28,0x28,0x21,0x28,0x63,0x20,0x26,0x20,0x37,0x29,0x29,0x20,0x3f,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x2c,0x20,0x32,0x34,0x55,0x29,0x20,0x5e,0x20,0x61, + 0x73,0x5f,0x75,0x69,0x6e,0x74,0x28,0x28,0x75,0x63,0x68,0x61,0x72,0x34,0x29,0x28,0x72,0x63,0x6f,0x6e,0x5b,0x69,0x2b,0x2b,0x5d,0x2c,0x20,0x30,0x55,0x2c,0x20,0x30, + 0x55,0x2c,0x20,0x30,0x55,0x29,0x29,0x20,0x3a,0x20,0x74,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x23, + 0x69,0x66,0x6e,0x64,0x65,0x66,0x20,0x58,0x4d,0x52,0x49,0x47,0x5f,0x4b,0x45,0x43,0x43,0x41,0x4b,0x5f,0x43,0x4c,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x58, + 0x4d,0x52,0x49,0x47,0x5f,0x4b,0x45,0x43,0x43,0x41,0x4b,0x5f,0x43,0x4c,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f, + 0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6e,0x64,0x63,0x5b,0x32,0x34,0x5d,0x20, + 0x3d,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x2c,0x20,0x30,0x78,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x38,0x32,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30, + 0x38,0x61,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x2c,0x20,0x30,0x78,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x38,0x62,0x2c,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30, + 0x30,0x31,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,0x38,0x31,0x2c,0x20,0x30,0x78,0x38,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x39,0x2c,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x38,0x61,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x38,0x2c,0x20,0x30,0x78,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,0x30,0x39,0x2c,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30, + 0x30,0x61,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30,0x38,0x62,0x2c,0x20,0x30,0x78,0x38,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x62,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30, + 0x38,0x39,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x33,0x2c,0x20,0x30,0x78,0x38,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x32,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x38,0x30,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x61,0x2c,0x20,0x30,0x78,0x38,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x61,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30, + 0x38,0x31,0x2c,0x0a,0x20,0x20,0x20,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x38,0x30,0x2c,0x20,0x30,0x78,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x2c,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x30,0x30,0x30,0x38,0x30, + 0x30,0x38,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20, + 0x75,0x69,0x6e,0x74,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6f,0x74,0x63,0x5b,0x32,0x34,0x5d,0x20,0x3d,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x31,0x2c, + 0x20,0x20,0x33,0x2c,0x20,0x20,0x36,0x2c,0x20,0x20,0x31,0x30,0x2c,0x20,0x31,0x35,0x2c,0x20,0x32,0x31,0x2c,0x20,0x32,0x38,0x2c,0x20,0x33,0x36,0x2c,0x20,0x34,0x35, + 0x2c,0x20,0x35,0x35,0x2c,0x20,0x32,0x2c,0x20,0x20,0x31,0x34,0x2c,0x0a,0x20,0x20,0x20,0x20,0x32,0x37,0x2c,0x20,0x34,0x31,0x2c,0x20,0x35,0x36,0x2c,0x20,0x38,0x2c, + 0x20,0x20,0x32,0x35,0x2c,0x20,0x34,0x33,0x2c,0x20,0x36,0x32,0x2c,0x20,0x31,0x38,0x2c,0x20,0x33,0x39,0x2c,0x20,0x36,0x31,0x2c,0x20,0x32,0x30,0x2c,0x20,0x34,0x34, + 0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x69, + 0x6e,0x74,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x32,0x34,0x5d,0x20,0x3d,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x31,0x30,0x2c,0x20, + 0x37,0x2c,0x20,0x20,0x31,0x31,0x2c,0x20,0x31,0x37,0x2c,0x20,0x31,0x38,0x2c,0x20,0x33,0x2c,0x20,0x35,0x2c,0x20,0x20,0x31,0x36,0x2c,0x20,0x38,0x2c,0x20,0x20,0x32, + 0x31,0x2c,0x20,0x32,0x34,0x2c,0x20,0x34,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x35,0x2c,0x20,0x32,0x33,0x2c,0x20,0x31,0x39,0x2c,0x20,0x31,0x33,0x2c,0x20,0x31,0x32, + 0x2c,0x20,0x32,0x2c,0x20,0x32,0x30,0x2c,0x20,0x31,0x34,0x2c,0x20,0x32,0x32,0x2c,0x20,0x39,0x2c,0x20,0x20,0x36,0x2c,0x20,0x20,0x31,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a, + 0x76,0x6f,0x69,0x64,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x31,0x36,0x30,0x30,0x5f,0x31,0x28,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x29,0x0a,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x69,0x2c,0x20,0x72,0x6f,0x75,0x6e,0x64,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x74,0x2c,0x20,0x62, + 0x63,0x5b,0x35,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20, + 0x66,0x6f,0x72,0x20,0x28,0x72,0x6f,0x75,0x6e,0x64,0x20,0x3d,0x20,0x30,0x3b,0x20,0x72,0x6f,0x75,0x6e,0x64,0x20,0x3c,0x20,0x32,0x34,0x3b,0x20,0x2b,0x2b,0x72,0x6f, + 0x75,0x6e,0x64,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x54,0x68,0x65,0x74,0x61,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x62,0x63,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x30,0x5d,0x20,0x5e, + 0x20,0x73,0x74,0x5b,0x31,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x31,0x5d,0x20, + 0x3d,0x20,0x73,0x74,0x5b,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x36,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x36, + 0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x32,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x32, + 0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74, + 0x5b,0x32,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x33,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x33,0x5d,0x20,0x5e,0x20,0x73,0x74, + 0x5b,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x33,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x33,0x5d,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x34,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x39,0x5d,0x20,0x5e,0x20, + 0x73,0x74,0x5b,0x31,0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x34,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20, + 0x28,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x35,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x74,0x20,0x3d,0x20,0x62,0x63,0x5b,0x28,0x69,0x20,0x2b,0x20,0x34,0x29,0x20,0x25,0x20,0x35,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x62, + 0x63,0x5b,0x28,0x69,0x20,0x2b,0x20,0x31,0x29,0x20,0x25,0x20,0x35,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x20,0x20,0x20,0x20,0x5d,0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73, + 0x74,0x5b,0x69,0x20,0x2b,0x20,0x20,0x35,0x5d,0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69, + 0x20,0x2b,0x20,0x31,0x30,0x5d,0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20, + 0x31,0x35,0x5d,0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x30,0x5d, + 0x20,0x5e,0x3d,0x20,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x52,0x68,0x6f, + 0x20,0x50,0x69,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x20,0x3d,0x20,0x73,0x74,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23, + 0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x20,0x3d, + 0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x34,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62, + 0x63,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x69,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x69,0x5d,0x5d,0x20,0x3d,0x20,0x72,0x6f, + 0x74,0x61,0x74,0x65,0x28,0x74,0x2c,0x20,0x28,0x75,0x6c,0x6f,0x6e,0x67,0x29,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6f,0x74,0x63,0x5b,0x69,0x5d,0x29,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x20,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x69,0x20,0x2b,0x3d, + 0x20,0x35,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x74,0x6d,0x70,0x5b,0x35,0x5d,0x3b,0x0a, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x78,0x20,0x3d,0x20,0x30,0x3b,0x20,0x78,0x20,0x3c,0x20,0x35,0x3b, + 0x20,0x2b,0x2b,0x78,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x6d,0x70,0x5b,0x78,0x5d,0x20,0x3d, + 0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x78,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x28,0x28, + 0x78,0x20,0x2b,0x20,0x32,0x29,0x20,0x25,0x20,0x35,0x29,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x78,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20, + 0x28,0x28,0x78,0x20,0x2b,0x20,0x31,0x29,0x20,0x25,0x20,0x35,0x29,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x78,0x20,0x3d,0x20,0x30,0x3b,0x20,0x78,0x20,0x3c,0x20,0x35,0x3b,0x20, + 0x2b,0x2b,0x78,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x78,0x5d, + 0x20,0x3d,0x20,0x74,0x6d,0x70,0x5b,0x78,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x20,0x49,0x6f,0x74,0x61,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b, + 0x30,0x5d,0x20,0x5e,0x3d,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6e,0x64,0x63,0x5b,0x72,0x6f,0x75,0x6e,0x64,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d, + 0x0a,0x7d,0x0a,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x31,0x36,0x30,0x30,0x5f,0x32,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20, + 0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x69,0x2c,0x20,0x72,0x6f,0x75,0x6e,0x64,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x74,0x2c,0x20,0x62,0x63,0x5b,0x35,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20, + 0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x72,0x6f,0x75,0x6e,0x64,0x20,0x3d,0x20,0x30,0x3b,0x20,0x72,0x6f,0x75, + 0x6e,0x64,0x20,0x3c,0x20,0x32,0x34,0x3b,0x20,0x2b,0x2b,0x72,0x6f,0x75,0x6e,0x64,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x30, + 0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b, + 0x31,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x30,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74,0x5b,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74, + 0x5b,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x32,0x5d,0x2c,0x20, + 0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x31,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74, + 0x5b,0x36,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x36,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x31,0x5d,0x20,0x5e, + 0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74,0x5b,0x33,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x33,0x5d,0x20,0x5e, + 0x20,0x73,0x74,0x5b,0x31,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x33,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x62,0x63,0x5b,0x32,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x32,0x5d,0x20,0x5e, + 0x20,0x73,0x74,0x5b,0x31,0x37,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x32,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74,0x5b,0x34,0x5d,0x20, + 0x5e,0x20,0x73,0x74,0x5b,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32, + 0x34,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x33,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x33,0x5d,0x20, + 0x5e,0x20,0x73,0x74,0x5b,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x33,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x38,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32, + 0x33,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74,0x5b,0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31, + 0x30,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x35,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x30,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x34,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31, + 0x34,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x39,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x32,0x34,0x5d,0x20,0x5e,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x73,0x74, + 0x5b,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x36,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x31,0x36,0x5d,0x20,0x5e,0x20, + 0x73,0x74,0x5b,0x32,0x31,0x5d,0x2c,0x20,0x31,0x55,0x4c,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x30,0x5d,0x20,0x20,0x5e,0x3d, + 0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x35,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x30,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x73,0x74,0x5b,0x31,0x35,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x30, + 0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x34,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62, + 0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x36,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x31,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x73,0x74,0x5b,0x31,0x36,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x31,0x5d,0x20, + 0x5e,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b, + 0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x37,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x32,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74, + 0x5b,0x31,0x37,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x32,0x5d,0x20,0x5e,0x3d, + 0x20,0x62,0x63,0x5b,0x31,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x33,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x32,0x5d, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x38,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x33,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31, + 0x38,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x33,0x5d,0x20,0x5e,0x3d,0x20,0x62, + 0x63,0x5b,0x32,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x34,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x33,0x5d,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x39,0x5d,0x20,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x33,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x73,0x74,0x5b,0x31,0x34,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x33,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x31,0x39,0x5d, + 0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b,0x33,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x32,0x34,0x5d,0x20,0x5e,0x3d,0x20,0x62,0x63,0x5b, + 0x33,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x52,0x68,0x6f,0x20,0x50,0x69,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74, + 0x20,0x3d,0x20,0x73,0x74,0x5b,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c, + 0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x34,0x3b,0x20,0x2b, + 0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x63,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x73,0x74,0x5b,0x6b,0x65,0x63, + 0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x69,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x6b,0x65, + 0x63,0x63,0x61,0x6b,0x66,0x5f,0x70,0x69,0x6c,0x6e,0x5b,0x69,0x5d,0x5d,0x20,0x3d,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x2c,0x20,0x28,0x75,0x6c,0x6f,0x6e, + 0x67,0x29,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6f,0x74,0x63,0x5b,0x69,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x74,0x20,0x3d,0x20,0x62,0x63,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70, + 0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20, + 0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x69,0x20,0x2b,0x3d,0x20,0x35,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x74,0x6d,0x70,0x31,0x20,0x3d,0x20,0x73,0x74,0x5b,0x69,0x5d,0x2c,0x20,0x74,0x6d,0x70,0x32,0x20,0x3d,0x20, + 0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x31,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x5d,0x20,0x3d,0x20, + 0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b,0x69,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x5d,0x2c,0x20,0x73,0x74,0x5b, + 0x69,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x31,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69, + 0x20,0x2b,0x20,0x31,0x5d,0x20,0x3d,0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x31,0x5d,0x20,0x5e,0x20,0x73,0x74, + 0x5b,0x69,0x20,0x2b,0x20,0x33,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x31,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x5d,0x29,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x5d,0x20,0x3d,0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63, + 0x74,0x28,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x32,0x5d,0x20,0x5e,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20, + 0x32,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x33,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69, + 0x20,0x2b,0x20,0x33,0x5d,0x20,0x3d,0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x33,0x5d,0x20,0x5e,0x20,0x74,0x6d, + 0x70,0x31,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x33,0x5d,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x20,0x3d,0x20,0x62,0x69,0x74,0x73,0x65,0x6c,0x65,0x63,0x74,0x28,0x73,0x74,0x5b, + 0x69,0x20,0x2b,0x20,0x34,0x5d,0x20,0x5e,0x20,0x74,0x6d,0x70,0x32,0x2c,0x20,0x73,0x74,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x2c,0x20,0x74,0x6d,0x70,0x31,0x29,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x20,0x49,0x6f,0x74,0x61,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x5b,0x30,0x5d,0x20,0x5e,0x3d,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x5f,0x72,0x6e,0x64,0x63,0x5b,0x72,0x6f,0x75,0x6e,0x64, + 0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x0a,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x75,0x69, + 0x6e,0x74,0x20,0x67,0x65,0x74,0x49,0x64,0x78,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f, + 0x62,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x20,0x2d,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x30,0x29, + 0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x23,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x49,0x44,0x58,0x28,0x78,0x29,0x20,0x28,0x78,0x29,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e, + 0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x20,0x2b,0x20,0x62,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a, + 0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x73,0x75,0x62,0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20, + 0x61,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x20,0x2d,0x20,0x62,0x3b, + 0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x66,0x6c, + 0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61, + 0x20,0x2a,0x20,0x62,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x64,0x69,0x76,0x5f, + 0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74, + 0x75,0x72,0x6e,0x20,0x61,0x20,0x2f,0x20,0x62,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d, + 0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x69,0x6e,0x74,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72, + 0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x73,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x61,0x73,0x5f,0x69,0x6e,0x74,0x34,0x28,0x61,0x29,0x20,0x26,0x20,0x28,0x69,0x6e, + 0x74,0x34,0x29,0x28,0x62,0x29,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x6f, + 0x72,0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x69,0x6e,0x74,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75, + 0x72,0x6e,0x20,0x61,0x73,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x61,0x73,0x5f,0x69,0x6e,0x74,0x34,0x28,0x61,0x29,0x20,0x7c,0x20,0x28,0x69,0x6e,0x74,0x34,0x29, + 0x28,0x62,0x29,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x66,0x6d,0x6f,0x64, + 0x5f,0x70,0x73,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x76,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x63,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x34,0x20,0x64,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x64,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x34,0x20,0x63,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x64,0x69,0x76,0x5f,0x70,0x73,0x28,0x76,0x2c,0x20,0x64,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x20,0x3d,0x20, + 0x74,0x72,0x75,0x6e,0x63,0x28,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x63,0x2c,0x20, + 0x64,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5f,0x6d,0x6d,0x5f,0x73,0x75,0x62,0x5f,0x70,0x73,0x28,0x76,0x2c,0x20,0x63,0x29,0x3b, + 0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x69,0x6e,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x78,0x6f,0x72,0x5f,0x73,0x69,0x31,0x32,0x38,0x28,0x69, + 0x6e,0x74,0x34,0x20,0x61,0x2c,0x20,0x69,0x6e,0x74,0x34,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x20,0x5e,0x20, + 0x62,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x78,0x6f,0x72,0x5f,0x70,0x73,0x28, + 0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x61,0x2c,0x20,0x69,0x6e,0x74,0x20,0x62,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x61,0x73, + 0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x61,0x73,0x5f,0x69,0x6e,0x74,0x34,0x28,0x61,0x29,0x20,0x5e,0x20,0x28,0x69,0x6e,0x74,0x34,0x29,0x28,0x62,0x29,0x29,0x3b, + 0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x69,0x6e,0x74,0x34,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x72,0x5f,0x65,0x70,0x69,0x38, + 0x28,0x69,0x6e,0x74,0x34,0x20,0x61,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x72,0x6f,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63, + 0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x38,0x20,0x2a,0x20,0x72,0x6f,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63, + 0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x6c,0x65,0x66,0x74,0x20,0x3d,0x20,0x28,0x33,0x32,0x20,0x2d,0x20,0x38,0x20,0x2a,0x20,0x72,0x6f,0x74,0x29,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x28,0x69,0x6e,0x74,0x34,0x29,0x28,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69, + 0x6e,0x74,0x29,0x61,0x2e,0x78,0x20,0x3e,0x3e,0x20,0x72,0x69,0x67,0x68,0x74,0x29,0x20,0x7c,0x20,0x28,0x20,0x61,0x2e,0x79,0x20,0x3c,0x3c,0x20,0x6c,0x65,0x66,0x74, + 0x20,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x29,0x61,0x2e,0x79,0x20,0x3e,0x3e,0x20,0x72,0x69,0x67,0x68,0x74,0x29, + 0x20,0x7c,0x20,0x28,0x20,0x61,0x2e,0x7a,0x20,0x3c,0x3c,0x20,0x6c,0x65,0x66,0x74,0x20,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69, + 0x6e,0x74,0x29,0x61,0x2e,0x7a,0x20,0x3e,0x3e,0x20,0x72,0x69,0x67,0x68,0x74,0x29,0x20,0x7c,0x20,0x28,0x20,0x61,0x2e,0x77,0x20,0x3c,0x3c,0x20,0x6c,0x65,0x66,0x74, + 0x20,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x29,0x61,0x2e,0x77,0x20,0x3e,0x3e,0x20,0x72,0x69,0x67,0x68,0x74,0x29, + 0x20,0x7c,0x20,0x28,0x20,0x61,0x2e,0x78,0x20,0x3c,0x3c,0x20,0x6c,0x65,0x66,0x74,0x20,0x29,0x0a,0x20,0x20,0x20,0x20,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e, + 0x6c,0x69,0x6e,0x65,0x20,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x34,0x2a,0x20,0x73,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x5f,0x70,0x74,0x72, + 0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x64,0x78,0x2c,0x20,0x75,0x69,0x6e,0x74,0x20,0x6e,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x20, + 0x2a,0x6c,0x70,0x61,0x64,0x29,0x20,0x7b,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x34,0x2a,0x29, + 0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x63,0x68,0x61,0x72,0x2a,0x29,0x6c,0x70,0x61,0x64,0x20,0x2b,0x20,0x28,0x69,0x64,0x78,0x20,0x26,0x20,0x4d, + 0x41,0x53,0x4b,0x29,0x20,0x2b,0x20,0x6e,0x20,0x2a,0x20,0x31,0x36,0x29,0x3b,0x20,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x34,0x20,0x66,0x6d,0x61,0x5f,0x62,0x72,0x65,0x61,0x6b,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x78,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x42, + 0x72,0x65,0x61,0x6b,0x20,0x74,0x68,0x65,0x20,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x63,0x79,0x20,0x63,0x68,0x61,0x69,0x6e,0x20,0x62,0x79,0x20,0x73,0x65,0x74, + 0x69,0x74,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x65,0x78,0x70,0x20,0x74,0x6f,0x20,0x3f,0x3f,0x3f,0x3f,0x3f,0x30,0x31,0x0a,0x20,0x20,0x20,0x20,0x78,0x20,0x3d,0x20, + 0x5f,0x6d,0x6d,0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x78,0x2c,0x20,0x30,0x78,0x46,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72, + 0x65,0x74,0x75,0x72,0x6e,0x20,0x5f,0x6d,0x6d,0x5f,0x6f,0x72,0x5f,0x70,0x73,0x28,0x78,0x2c,0x20,0x30,0x78,0x30,0x30,0x38,0x30,0x30,0x30,0x30,0x30,0x29,0x3b,0x0a, + 0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x76,0x6f,0x69,0x64,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34, + 0x20,0x6e,0x30,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x31,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x32,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x34,0x20,0x6e,0x33,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x6e,0x2c,0x20,0x66, + 0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x64,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x63,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6e,0x31,0x20,0x3d,0x20, + 0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x6e,0x31,0x2c,0x20,0x2a,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e, + 0x6e,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x30,0x2c,0x20,0x2a,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6e,0x6e,0x20,0x3d, + 0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x31,0x2c,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x6e,0x2c,0x6e,0x6e, + 0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6e,0x6e,0x20,0x3d,0x20,0x66,0x6d,0x61,0x5f,0x62,0x72,0x65,0x61,0x6b,0x28,0x6e,0x6e,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x2a,0x6e,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x6e,0x2c,0x20,0x6e,0x6e,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x6e,0x33, + 0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x73,0x75,0x62,0x5f,0x70,0x73,0x28,0x6e,0x33,0x2c,0x20,0x2a,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x34,0x20,0x64,0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x32,0x2c,0x20,0x2a,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x64, + 0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x6e,0x33,0x2c,0x20,0x5f,0x6d,0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x64,0x64, + 0x2c,0x64,0x64,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x64,0x64,0x20,0x3d,0x20,0x66,0x6d,0x61,0x5f,0x62,0x72,0x65,0x61,0x6b,0x28,0x64,0x64,0x29,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x2a,0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x64,0x2c,0x20,0x64,0x64,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20, + 0x20,0x2f,0x2f,0x43,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x66,0x65,0x65,0x64,0x62,0x61,0x63,0x6b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x63,0x20,0x3d,0x20,0x5f,0x6d, + 0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x63,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x63,0x20,0x3d,0x20,0x5f,0x6d, + 0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x63,0x2c,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x30,0x2e,0x37,0x33,0x34,0x33,0x37,0x35,0x66,0x29, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x6e,0x6e,0x2c, + 0x20,0x64,0x64,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x30,0x78,0x38,0x30, + 0x37,0x46,0x46,0x46,0x46,0x46,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6f,0x72,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x30,0x78, + 0x34,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x63,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a, + 0x63,0x2c,0x20,0x72,0x29,0x3b,0x0a,0x0a,0x7d,0x0a,0x0a,0x0a,0x2f,0x2f,0x20,0x39,0x2a,0x38,0x20,0x2b,0x20,0x32,0x20,0x3d,0x20,0x37,0x34,0x0a,0x69,0x6e,0x6c,0x69, + 0x6e,0x65,0x20,0x76,0x6f,0x69,0x64,0x20,0x72,0x6f,0x75,0x6e,0x64,0x5f,0x63,0x6f,0x6d,0x70,0x75,0x74,0x65,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x30,0x2c, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x31,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x32,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x33, + 0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x63,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x34,0x2a,0x20,0x72,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28, + 0x30,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x64,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x30, + 0x2e,0x30,0x66,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c, + 0x20,0x6e,0x33,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f, + 0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x6e,0x30,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c, + 0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x32,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x6e, + 0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75, + 0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x33,0x2c,0x20,0x6e,0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26, + 0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x33,0x2c,0x20,0x6e,0x32,0x2c, + 0x20,0x6e,0x31,0x2c,0x20,0x6e,0x30,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x32,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x30,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c, + 0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x31,0x2c,0x20,0x6e, + 0x30,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x73,0x75,0x62,0x5f,0x72,0x6f,0x75,0x6e,0x64,0x28,0x6e,0x30,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x72,0x6e,0x64,0x5f, + 0x63,0x2c,0x20,0x26,0x6e,0x2c,0x20,0x26,0x64,0x2c,0x20,0x63,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x4d,0x61,0x6b,0x65,0x20,0x73,0x75,0x72,0x65, + 0x20,0x61,0x62,0x73,0x28,0x64,0x29,0x20,0x3e,0x20,0x32,0x2e,0x30,0x20,0x2d,0x20,0x74,0x68,0x69,0x73,0x20,0x70,0x72,0x65,0x76,0x65,0x6e,0x74,0x73,0x20,0x64,0x69, + 0x76,0x69,0x73,0x69,0x6f,0x6e,0x20,0x62,0x79,0x20,0x7a,0x65,0x72,0x6f,0x20,0x61,0x6e,0x64,0x20,0x61,0x63,0x63,0x69,0x64,0x65,0x6e,0x74,0x61,0x6c,0x20,0x6f,0x76, + 0x65,0x72,0x66,0x6c,0x6f,0x77,0x73,0x20,0x62,0x79,0x20,0x64,0x69,0x76,0x69,0x73,0x69,0x6f,0x6e,0x20,0x62,0x79,0x20,0x3c,0x20,0x31,0x2e,0x30,0x0a,0x20,0x20,0x20, + 0x20,0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x64,0x2c,0x20,0x30,0x78,0x46,0x46,0x37,0x46,0x46,0x46,0x46,0x46,0x29,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x64,0x20,0x3d,0x20,0x5f,0x6d,0x6d,0x5f,0x6f,0x72,0x5f,0x70,0x73,0x28,0x64,0x2c,0x20,0x30,0x78,0x34,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x29, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x72,0x20,0x3d,0x5f,0x6d,0x6d,0x5f,0x61,0x64,0x64,0x5f,0x70,0x73,0x28,0x2a,0x72,0x2c,0x20,0x5f,0x6d,0x6d,0x5f,0x64,0x69,0x76, + 0x5f,0x70,0x73,0x28,0x6e,0x2c,0x64,0x29,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x69,0x6e,0x74,0x34,0x20,0x73,0x69,0x6e,0x67,0x6c, + 0x65,0x5f,0x63,0x6f,0x6d,0x75,0x70,0x74,0x65,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x30,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x31,0x2c,0x20, + 0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x32,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x33,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x63,0x6e,0x74,0x2c, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x73, + 0x75,0x6d,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x63,0x6e,0x74, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x33,0x35,0x20,0x6d,0x61,0x74,0x68,0x73,0x20,0x63,0x61,0x6c,0x6c,0x73,0x20,0x66,0x6f,0x6c,0x6c,0x6f,0x77,0x20, + 0x28,0x31,0x34,0x30,0x20,0x46,0x4c,0x4f,0x50,0x53,0x29,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x72,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61, + 0x74,0x34,0x29,0x28,0x30,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20, + 0x69,0x20,0x3c,0x20,0x34,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x6f,0x75,0x6e,0x64,0x5f,0x63,0x6f,0x6d,0x70, + 0x75,0x74,0x65,0x28,0x6e,0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x26,0x63,0x2c,0x20,0x26, + 0x72,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x64,0x6f,0x20,0x61,0x20,0x71,0x75,0x69,0x63,0x6b,0x20,0x66,0x6d,0x6f, + 0x64,0x20,0x62,0x79,0x20,0x73,0x65,0x74,0x74,0x69,0x6e,0x67,0x20,0x65,0x78,0x70,0x20,0x74,0x6f,0x20,0x32,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d, + 0x6d,0x5f,0x61,0x6e,0x64,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x30,0x78,0x38,0x30,0x37,0x46,0x46,0x46,0x46,0x46,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d, + 0x20,0x5f,0x6d,0x6d,0x5f,0x6f,0x72,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x30,0x78,0x34,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a, + 0x73,0x75,0x6d,0x20,0x3d,0x20,0x72,0x3b,0x20,0x2f,0x2f,0x20,0x33,0x34,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x78,0x20,0x3d,0x20,0x28,0x66, + 0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x35,0x33,0x36,0x38,0x37,0x30,0x38,0x38,0x30,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x20,0x3d,0x20,0x5f,0x6d, + 0x6d,0x5f,0x6d,0x75,0x6c,0x5f,0x70,0x73,0x28,0x72,0x2c,0x20,0x78,0x29,0x3b,0x20,0x2f,0x2f,0x20,0x33,0x35,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e, + 0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x69,0x6e,0x74,0x34,0x5f,0x72,0x74,0x65,0x28,0x72,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65, + 0x20,0x76,0x6f,0x69,0x64,0x20,0x73,0x69,0x6e,0x67,0x6c,0x65,0x5f,0x63,0x6f,0x6d,0x75,0x70,0x74,0x65,0x5f,0x77,0x72,0x61,0x70,0x28,0x63,0x6f,0x6e,0x73,0x74,0x20, + 0x75,0x69,0x6e,0x74,0x20,0x72,0x6f,0x74,0x2c,0x20,0x69,0x6e,0x74,0x34,0x20,0x76,0x30,0x2c,0x20,0x69,0x6e,0x74,0x34,0x20,0x76,0x31,0x2c,0x20,0x69,0x6e,0x74,0x34, + 0x20,0x76,0x32,0x2c,0x20,0x69,0x6e,0x74,0x34,0x20,0x76,0x33,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x63,0x6e,0x74,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20, + 0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x2a,0x20,0x73,0x75,0x6d,0x2c,0x20,0x5f,0x5f,0x6c,0x6f, + 0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x34,0x2a,0x20,0x6f,0x75,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x30,0x20,0x3d, + 0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x5f,0x72,0x74,0x65,0x28,0x76,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, + 0x61,0x74,0x34,0x20,0x6e,0x31,0x20,0x3d,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x5f,0x72,0x74,0x65,0x28,0x76,0x31,0x29,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x32,0x20,0x3d,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x5f, + 0x72,0x74,0x65,0x28,0x76,0x32,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x33,0x20,0x3d,0x20,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74, + 0x5f,0x66,0x6c,0x6f,0x61,0x74,0x34,0x5f,0x72,0x74,0x65,0x28,0x76,0x33,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x34,0x20,0x72,0x20,0x3d,0x20,0x73, + 0x69,0x6e,0x67,0x6c,0x65,0x5f,0x63,0x6f,0x6d,0x75,0x70,0x74,0x65,0x28,0x6e,0x30,0x2c,0x20,0x6e,0x31,0x2c,0x20,0x6e,0x32,0x2c,0x20,0x6e,0x33,0x2c,0x20,0x63,0x6e, + 0x74,0x2c,0x20,0x72,0x6e,0x64,0x5f,0x63,0x2c,0x20,0x73,0x75,0x6d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x6f,0x75,0x74,0x20,0x3d,0x20,0x72,0x6f,0x74,0x20,0x3d, + 0x3d,0x20,0x30,0x20,0x3f,0x20,0x72,0x20,0x3a,0x20,0x5f,0x6d,0x6d,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x72,0x5f,0x65,0x70,0x69,0x38,0x28,0x72,0x2c,0x20,0x72,0x6f,0x74, + 0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75, + 0x69,0x6e,0x74,0x20,0x6c,0x6f,0x6f,0x6b,0x5b,0x31,0x36,0x5d,0x5b,0x34,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x7b,0x30,0x2c,0x20,0x31,0x2c,0x20,0x32, + 0x2c,0x20,0x33,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x30,0x2c,0x20,0x32,0x2c,0x20,0x33,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x30,0x2c,0x20, + 0x33,0x2c,0x20,0x31,0x2c,0x20,0x32,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x30,0x2c,0x20,0x33,0x2c,0x20,0x32,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x0a,0x20,0x20,0x20, + 0x20,0x7b,0x31,0x2c,0x20,0x30,0x2c,0x20,0x32,0x2c,0x20,0x33,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x31,0x2c,0x20,0x32,0x2c,0x20,0x33,0x2c,0x20,0x30,0x7d,0x2c, + 0x0a,0x20,0x20,0x20,0x20,0x7b,0x31,0x2c,0x20,0x33,0x2c,0x20,0x30,0x2c,0x20,0x32,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x31,0x2c,0x20,0x33,0x2c,0x20,0x32,0x2c, + 0x20,0x30,0x7d,0x2c,0x0a,0x0a,0x20,0x20,0x20,0x20,0x7b,0x32,0x2c,0x20,0x31,0x2c,0x20,0x30,0x2c,0x20,0x33,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x32,0x2c,0x20, + 0x30,0x2c,0x20,0x33,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x32,0x2c,0x20,0x33,0x2c,0x20,0x31,0x2c,0x20,0x30,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20, + 0x7b,0x32,0x2c,0x20,0x33,0x2c,0x20,0x30,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x0a,0x20,0x20,0x20,0x20,0x7b,0x33,0x2c,0x20,0x31,0x2c,0x20,0x32,0x2c,0x20,0x30,0x7d,0x2c, + 0x0a,0x20,0x20,0x20,0x20,0x7b,0x33,0x2c,0x20,0x32,0x2c,0x20,0x30,0x2c,0x20,0x31,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x33,0x2c,0x20,0x30,0x2c,0x20,0x31,0x2c, + 0x20,0x32,0x7d,0x2c,0x0a,0x20,0x20,0x20,0x20,0x7b,0x33,0x2c,0x20,0x30,0x2c,0x20,0x32,0x2c,0x20,0x31,0x7d,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69, + 0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f,0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x63,0x63,0x6e,0x74,0x5b,0x31,0x36, + 0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x34,0x33,0x37,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x32,0x38,0x31,0x32,0x35,0x66, + 0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x35,0x39,0x33,0x37,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x36,0x37,0x31,0x38,0x37,0x35,0x66,0x2c, + 0x0a,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x34,0x32,0x39,0x36,0x38,0x37,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x39,0x38,0x34,0x33,0x37,0x35,0x66, + 0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x30,0x34,0x36,0x38,0x37,0x35,0x66, + 0x2c,0x0a,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x34,0x31,0x34,0x30,0x36,0x32,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x32,0x37,0x33,0x34,0x33,0x37,0x35, + 0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x32,0x35,0x37,0x38,0x31,0x32,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x32,0x38,0x39,0x30,0x36,0x32,0x35, + 0x66,0x2c,0x0a,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x32,0x30,0x33,0x31,0x32,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x35,0x31,0x35,0x36,0x32, + 0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x33,0x33,0x35,0x39,0x33,0x37,0x35,0x66,0x2c,0x0a,0x20,0x20,0x20,0x20,0x31,0x2e,0x34,0x36,0x30,0x39,0x33,0x37, + 0x35,0x66,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x68,0x61,0x72,0x65,0x64,0x4d,0x65,0x6d,0x43,0x68,0x75,0x6e,0x6b,0x0a,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x34,0x20,0x6f,0x75,0x74,0x5b,0x31,0x36,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x76,0x61,0x5b, + 0x31,0x36,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x5f,0x5f,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x5f,0x5f,0x28,0x28,0x72,0x65,0x71,0x64,0x5f,0x77,0x6f, + 0x72,0x6b,0x5f,0x67,0x72,0x6f,0x75,0x70,0x5f,0x73,0x69,0x7a,0x65,0x28,0x57,0x4f,0x52,0x4b,0x53,0x49,0x5a,0x45,0x20,0x2a,0x20,0x31,0x36,0x2c,0x20,0x31,0x2c,0x20, + 0x31,0x29,0x29,0x29,0x0a,0x5f,0x5f,0x6b,0x65,0x72,0x6e,0x65,0x6c,0x20,0x76,0x6f,0x69,0x64,0x20,0x63,0x6e,0x31,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20, + 0x69,0x6e,0x74,0x20,0x2a,0x6c,0x70,0x61,0x64,0x5f,0x69,0x6e,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x20,0x2a,0x73,0x70,0x61,0x64, + 0x2c,0x20,0x75,0x69,0x6e,0x74,0x20,0x6e,0x75,0x6d,0x54,0x68,0x72,0x65,0x61,0x64,0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75, + 0x69,0x6e,0x74,0x20,0x67,0x49,0x64,0x78,0x20,0x3d,0x20,0x67,0x65,0x74,0x49,0x64,0x78,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x63,0x68, + 0x75,0x6e,0x6b,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x20,0x2f,0x20,0x31,0x36,0x3b,0x0a,0x0a,0x20,0x20,0x20, + 0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x20,0x6c,0x70,0x61,0x64,0x20,0x3d,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20, + 0x69,0x6e,0x74,0x2a,0x29,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x63,0x68,0x61,0x72,0x2a,0x29,0x6c,0x70,0x61,0x64,0x5f,0x69,0x6e,0x20,0x2b,0x20, + 0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x2a,0x20,0x28,0x67,0x49,0x64,0x78,0x2f,0x31,0x36,0x29,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61, + 0x6c,0x20,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x68,0x61,0x72,0x65,0x64,0x4d,0x65,0x6d,0x43,0x68,0x75,0x6e,0x6b,0x20,0x73,0x6d,0x65,0x6d,0x5f,0x69,0x6e,0x5b, + 0x57,0x4f,0x52,0x4b,0x53,0x49,0x5a,0x45,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x68, + 0x61,0x72,0x65,0x64,0x4d,0x65,0x6d,0x43,0x68,0x75,0x6e,0x6b,0x2a,0x20,0x73,0x6d,0x65,0x6d,0x20,0x3d,0x20,0x73,0x6d,0x65,0x6d,0x5f,0x69,0x6e,0x20,0x2b,0x20,0x63, + 0x68,0x75,0x6e,0x6b,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x74,0x69,0x64,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f, + 0x69,0x64,0x28,0x30,0x29,0x20,0x25,0x20,0x31,0x36,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x69,0x64,0x78,0x48,0x61,0x73,0x68,0x20,0x3d,0x20, + 0x67,0x49,0x64,0x78,0x2f,0x31,0x36,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x73,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c, + 0x20,0x75,0x69,0x6e,0x74,0x2a,0x29,0x73,0x70,0x61,0x64,0x29,0x5b,0x69,0x64,0x78,0x48,0x61,0x73,0x68,0x20,0x2a,0x20,0x35,0x30,0x5d,0x20,0x3e,0x3e,0x20,0x38,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x76,0x73,0x20,0x3d,0x20,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x29,0x28,0x30,0x29,0x3b,0x0a,0x0a,0x20, + 0x20,0x20,0x20,0x2f,0x2f,0x20,0x74,0x69,0x64,0x20,0x64,0x69,0x76,0x69,0x64,0x65,0x64,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74, + 0x20,0x74,0x69,0x64,0x64,0x20,0x3d,0x20,0x74,0x69,0x64,0x20,0x2f,0x20,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x74,0x69,0x64,0x20,0x6d,0x6f,0x64,0x75, + 0x6c,0x6f,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x74,0x69,0x64,0x6d,0x20,0x3d,0x20,0x74,0x69,0x64,0x20,0x25,0x20,0x34, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x3d,0x20,0x74,0x69,0x64,0x64,0x20,0x2a,0x20, + 0x31,0x36,0x20,0x2b,0x20,0x74,0x69,0x64,0x6d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x43, + 0x4e,0x5f,0x55,0x4e,0x52,0x4f,0x4c,0x4c,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20, + 0x3c,0x20,0x49,0x54,0x45,0x52,0x41,0x54,0x49,0x4f,0x4e,0x53,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d, + 0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x74,0x6d,0x70,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a, + 0x29,0x73,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x5f,0x70,0x74,0x72,0x28,0x73,0x2c,0x20,0x74,0x69,0x64,0x64,0x2c,0x20,0x6c,0x70,0x61,0x64,0x29,0x29,0x5b, + 0x74,0x69,0x64,0x6d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x28,0x73, + 0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x29,0x5b,0x74,0x69,0x64,0x5d,0x20,0x3d,0x20,0x74,0x6d,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d, + 0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x69,0x6e,0x67,0x6c,0x65,0x5f,0x63,0x6f,0x6d, + 0x75,0x70,0x74,0x65,0x5f,0x77,0x72,0x61,0x70,0x28,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x69,0x64,0x6d,0x2c, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x28,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x20,0x2b,0x20,0x6c, + 0x6f,0x6f,0x6b,0x5b,0x74,0x69,0x64,0x5d,0x5b,0x30,0x5d,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x28, + 0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x20,0x2b,0x20,0x6c,0x6f,0x6f,0x6b,0x5b,0x74,0x69,0x64,0x5d,0x5b,0x31,0x5d,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x28,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x20,0x2b,0x20,0x6c,0x6f,0x6f,0x6b,0x5b,0x74,0x69, + 0x64,0x5d,0x5b,0x32,0x5d,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x28,0x73,0x6d,0x65,0x6d,0x2d,0x3e, + 0x6f,0x75,0x74,0x20,0x2b,0x20,0x6c,0x6f,0x6f,0x6b,0x5b,0x74,0x69,0x64,0x5d,0x5b,0x33,0x5d,0x29,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x63,0x63,0x6e,0x74,0x5b,0x74,0x69,0x64,0x5d,0x2c,0x20,0x76,0x73,0x2c,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x20,0x2b,0x20,0x74, + 0x69,0x64,0x2c,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x20,0x2b,0x20, + 0x74,0x69,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x6d,0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e, + 0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x6f,0x75,0x74,0x58,0x6f,0x72,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c, + 0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x5d,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x75,0x69,0x6e,0x74,0x20,0x64,0x64,0x20,0x3d,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x2b,0x20,0x34,0x3b,0x20,0x64, + 0x64,0x20,0x3c,0x20,0x28,0x74,0x69,0x64,0x64,0x20,0x2b,0x20,0x31,0x29,0x20,0x2a,0x20,0x31,0x36,0x3b,0x20,0x64,0x64,0x20,0x2b,0x3d,0x20,0x34,0x29,0x20,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x58,0x6f,0x72,0x20,0x5e,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20, + 0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x64,0x64,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x63,0x72,0x61,0x74,0x63,0x68,0x70, + 0x61,0x64,0x5f,0x70,0x74,0x72,0x28,0x73,0x2c,0x20,0x74,0x69,0x64,0x64,0x2c,0x20,0x6c,0x70,0x61,0x64,0x29,0x29,0x5b,0x74,0x69,0x64,0x6d,0x5d,0x20,0x3d,0x20,0x6f, + 0x75,0x74,0x58,0x6f,0x72,0x20,0x5e,0x20,0x74,0x6d,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69, + 0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x74,0x69,0x64,0x5d,0x20,0x3d,0x20,0x6f,0x75,0x74,0x58,0x6f,0x72,0x3b,0x0a,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x5d,0x20,0x2b,0x20,0x28,0x28,0x5f,0x5f,0x6c, + 0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x2b,0x20,0x34,0x5d, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x32,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f, + 0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x2b,0x20,0x38,0x5d,0x20,0x2b, + 0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63, + 0x6b,0x20,0x2b,0x20,0x31,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x74,0x69,0x64,0x5d,0x20,0x3d,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x2b,0x20,0x76,0x61,0x5f, + 0x74,0x6d,0x70,0x32,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43, + 0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x6f,0x75,0x74,0x32, + 0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x74,0x69,0x64, + 0x5d,0x20,0x5e,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x74,0x69, + 0x64,0x20,0x2b,0x20,0x34,0x20,0x5d,0x20,0x5e,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f, + 0x75,0x74,0x29,0x5b,0x74,0x69,0x64,0x20,0x2b,0x20,0x38,0x5d,0x20,0x5e,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d, + 0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x29,0x5b,0x74,0x69,0x64,0x20,0x2b,0x20,0x31,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x5f,0x74, + 0x6d,0x70,0x31,0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29, + 0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x5d,0x20,0x2b,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d, + 0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x2b,0x20,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x32, + 0x20,0x3d,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c, + 0x6f,0x63,0x6b,0x20,0x2b,0x20,0x38,0x5d,0x20,0x2b,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d, + 0x2d,0x3e,0x76,0x61,0x29,0x5b,0x62,0x6c,0x6f,0x63,0x6b,0x20,0x2b,0x20,0x31,0x32,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x5f,0x74,0x6d, + 0x70,0x31,0x20,0x3d,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x2b,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x3d,0x20,0x66,0x61,0x62,0x73,0x28,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x78,0x78,0x20,0x3d,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x2a,0x20,0x31,0x36,0x37,0x37,0x37,0x32,0x31,0x36,0x2e, + 0x30,0x66,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x78,0x78,0x5f,0x69,0x6e,0x74,0x20,0x3d,0x20,0x28,0x69,0x6e,0x74,0x29,0x78,0x78, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f, + 0x75,0x74,0x29,0x5b,0x74,0x69,0x64,0x5d,0x20,0x3d,0x20,0x6f,0x75,0x74,0x32,0x20,0x5e,0x20,0x78,0x78,0x5f,0x69,0x6e,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x2a,0x29,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x29,0x5b,0x74,0x69,0x64, + 0x5d,0x20,0x3d,0x20,0x76,0x61,0x5f,0x74,0x6d,0x70,0x31,0x20,0x2f,0x20,0x36,0x34,0x2e,0x30,0x66,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,0x65, + 0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x73,0x20,0x3d,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x76,0x61,0x5b,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x73,0x20,0x3d,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x5b,0x30,0x5d,0x2e,0x78,0x20,0x5e,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x5b, + 0x30,0x5d,0x2e,0x79,0x20,0x5e,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75,0x74,0x5b,0x30,0x5d,0x2e,0x7a,0x20,0x5e,0x20,0x73,0x6d,0x65,0x6d,0x2d,0x3e,0x6f,0x75, + 0x74,0x5b,0x30,0x5d,0x2e,0x77,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x5f, + 0x5f,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x73,0x6b,0x69,0x70,0x5b,0x33,0x5d,0x20,0x3d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x32, + 0x30,0x2c,0x32,0x32,0x2c,0x32,0x32,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,0x69,0x6e,0x6c,0x69,0x6e,0x65,0x20,0x76,0x6f,0x69,0x64,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74, + 0x65,0x5f,0x35,0x31,0x32,0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x64,0x78,0x2c,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x2a,0x20,0x69, + 0x6e,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x2a,0x20,0x6f,0x75,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x75,0x6c, + 0x6f,0x6e,0x67,0x20,0x68,0x61,0x73,0x68,0x5b,0x32,0x35,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x68,0x61,0x73,0x68,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x69,0x6e,0x5b, + 0x30,0x5d,0x20,0x5e,0x20,0x69,0x64,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x31,0x3b,0x20,0x69,0x20, + 0x3c,0x20,0x32,0x35,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x61,0x73,0x68,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x69, + 0x6e,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x61,0x20,0x3d,0x20,0x30,0x3b, + 0x20,0x61,0x20,0x3c,0x20,0x33,0x3b,0x20,0x2b,0x2b,0x61,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x31,0x36, + 0x30,0x30,0x5f,0x31,0x28,0x68,0x61,0x73,0x68,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d, + 0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x73,0x6b,0x69,0x70,0x5b,0x61,0x5d,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x68,0x61,0x73,0x68,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x20,0x2b,0x3d,0x20,0x73,0x6b,0x69,0x70,0x5b,0x61,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d, + 0x0a,0x0a,0x0a,0x5f,0x5f,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x5f,0x5f,0x28,0x28,0x72,0x65,0x71,0x64,0x5f,0x77,0x6f,0x72,0x6b,0x5f,0x67,0x72,0x6f,0x75, + 0x70,0x5f,0x73,0x69,0x7a,0x65,0x28,0x38,0x2c,0x20,0x38,0x2c,0x20,0x31,0x29,0x29,0x29,0x0a,0x5f,0x5f,0x6b,0x65,0x72,0x6e,0x65,0x6c,0x20,0x76,0x6f,0x69,0x64,0x20, + 0x63,0x6e,0x30,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x69,0x6e,0x70,0x75,0x74,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f, + 0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x20,0x2a,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c, + 0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x61,0x74,0x65,0x73,0x2c,0x20,0x75,0x69,0x6e,0x74,0x20,0x54,0x68,0x72,0x65,0x61,0x64,0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20, + 0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x49,0x64,0x78,0x20,0x3d,0x20,0x67,0x65,0x74,0x49,0x64,0x78,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x53,0x74,0x61,0x74,0x65,0x5f,0x62,0x75,0x66,0x5b,0x38,0x20,0x2a,0x20,0x32,0x35,0x5d, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x2a,0x20,0x53,0x74,0x61,0x74,0x65,0x20,0x3d,0x20,0x53,0x74,0x61, + 0x74,0x65,0x5f,0x62,0x75,0x66,0x20,0x2b,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x20,0x2a,0x20,0x32,0x35,0x3b,0x0a,0x0a, + 0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x20,0x2b,0x3d,0x20,0x32,0x35,0x20,0x2a,0x20,0x67,0x49,0x64, + 0x78,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x3d,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62, + 0x61,0x6c,0x20,0x69,0x6e,0x74,0x2a,0x29,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x63,0x68,0x61,0x72,0x2a,0x29,0x53,0x63,0x72,0x61,0x74,0x63,0x68, + 0x70,0x61,0x64,0x20,0x2b,0x20,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x2a,0x20,0x67,0x49,0x64,0x78,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69, + 0x66,0x20,0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x3d,0x3d,0x20,0x30,0x29,0x20,0x7b,0x0a,0x0a,0x23,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x64,0x65,0x66,0x20,0x5f,0x5f,0x4e,0x56,0x5f,0x43,0x4c,0x5f,0x43,0x5f,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20, + 0x38,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,0x69,0x5d, + 0x20,0x3d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x69,0x5d,0x3b,0x0a,0x23,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x38,0x20,0x2a,0x29,0x53,0x74,0x61, + 0x74,0x65,0x29,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x76,0x6c,0x6f,0x61,0x64,0x38,0x28,0x30,0x2c,0x20,0x69,0x6e,0x70,0x75,0x74,0x29,0x3b,0x0a,0x23,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x5b, + 0x38,0x5d,0x20,0x20,0x3d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x38,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74, + 0x65,0x5b,0x39,0x5d,0x20,0x20,0x3d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x39,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74, + 0x61,0x74,0x65,0x5b,0x31,0x30,0x5d,0x20,0x3d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x31,0x30,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x53,0x74,0x61,0x74,0x65,0x29,0x5b,0x39,0x5d,0x20,0x20,0x26,0x3d, + 0x20,0x30,0x78,0x30,0x30,0x46,0x46,0x46,0x46,0x46,0x46,0x55,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f, + 0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x53,0x74,0x61,0x74,0x65,0x29,0x5b,0x39,0x5d,0x20,0x20,0x7c,0x3d,0x20,0x28,0x28,0x28,0x75,0x69,0x6e,0x74, + 0x29,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x29,0x20,0x26,0x20,0x30,0x78,0x46,0x46,0x29,0x20,0x3c,0x3c,0x20,0x32,0x34, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x53, + 0x74,0x61,0x74,0x65,0x29,0x5b,0x31,0x30,0x5d,0x20,0x26,0x3d,0x20,0x30,0x78,0x46,0x46,0x30,0x30,0x30,0x30,0x30,0x30,0x55,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2a,0x20,0x65,0x78,0x70,0x6c,0x69,0x63,0x69,0x74,0x20,0x63,0x61,0x73,0x74,0x20,0x74,0x6f,0x20,0x60,0x75,0x69,0x6e,0x74,0x60, + 0x20,0x69,0x73,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x73,0x6f,0x6d,0x65,0x20,0x4f,0x70,0x65,0x6e,0x43,0x4c, + 0x20,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x73,0x20,0x28,0x65,0x2e,0x67,0x2e,0x20,0x4e,0x56,0x49,0x44,0x49,0x41,0x29,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x68,0x61,0x6e,0x64,0x6c,0x65,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f, + 0x69,0x64,0x20,0x61,0x6e,0x64,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x61,0x73,0x20,0x73,0x69,0x67,0x6e, + 0x65,0x64,0x20,0x6c,0x6f,0x6e,0x67,0x20,0x6c,0x6f,0x6e,0x67,0x20,0x69,0x6e,0x74,0x20,0x61,0x6e,0x64,0x20,0x61,0x64,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x30,0x78,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x2e,0x2e,0x2e,0x20,0x74,0x6f,0x20,0x60,0x67,0x65,0x74,0x5f,0x67,0x6c, + 0x6f,0x62,0x61,0x6c,0x5f,0x69,0x64,0x60,0x20,0x69,0x66,0x20,0x77,0x65,0x20,0x73,0x65,0x74,0x20,0x6f,0x6e,0x20,0x68,0x6f,0x73,0x74,0x20,0x73,0x69,0x64,0x65,0x20, + 0x61,0x20,0x33,0x32,0x62,0x69,0x74,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x77,0x68,0x65,0x72,0x65,0x20,0x74,0x68,0x65,0x20,0x66,0x69,0x72,0x73,0x74,0x20,0x62, + 0x69,0x74,0x20,0x69,0x73,0x20,0x60,0x31,0x60,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x20,0x28,0x65,0x76,0x65,0x6e,0x20,0x69, + 0x66,0x20,0x69,0x74,0x20,0x69,0x73,0x20,0x63,0x6f,0x72,0x72,0x65,0x63,0x74,0x20,0x63,0x61,0x73,0x74,0x65,0x64,0x20,0x74,0x6f,0x20,0x75,0x6e,0x73,0x69,0x67,0x6e, + 0x65,0x64,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x68,0x6f,0x73,0x74,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x2f,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x53,0x74,0x61, + 0x74,0x65,0x29,0x5b,0x31,0x30,0x5d,0x20,0x7c,0x3d,0x20,0x28,0x28,0x28,0x75,0x69,0x6e,0x74,0x29,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x69,0x64, + 0x28,0x30,0x29,0x20,0x3e,0x3e,0x20,0x38,0x29,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e, + 0x74,0x20,0x69,0x20,0x3d,0x20,0x31,0x31,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x30,0x78,0x30,0x30,0x55,0x4c,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x4c,0x61,0x73,0x74,0x20,0x62, + 0x69,0x74,0x20,0x6f,0x66,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x5b, + 0x31,0x36,0x5d,0x20,0x3d,0x20,0x30,0x78,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x55,0x4c,0x3b,0x0a,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66,0x31,0x36,0x30,0x30,0x5f,0x32,0x28,0x53,0x74,0x61,0x74,0x65,0x29,0x3b,0x0a,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x2b, + 0x2b,0x69,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x5b,0x69,0x5d,0x20, + 0x3d,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x0a,0x5f,0x5f,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x5f,0x5f,0x28,0x28,0x72,0x65,0x71, + 0x64,0x5f,0x77,0x6f,0x72,0x6b,0x5f,0x67,0x72,0x6f,0x75,0x70,0x5f,0x73,0x69,0x7a,0x65,0x28,0x36,0x34,0x2c,0x20,0x31,0x2c,0x20,0x31,0x29,0x29,0x29,0x0a,0x5f,0x5f, + 0x6b,0x65,0x72,0x6e,0x65,0x6c,0x20,0x76,0x6f,0x69,0x64,0x20,0x63,0x6e,0x30,0x30,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74,0x20,0x2a,0x53, + 0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x61,0x74,0x65, + 0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x49,0x64,0x78,0x20,0x3d,0x20,0x67,0x65,0x74,0x49,0x64, + 0x78,0x28,0x29,0x20,0x2f,0x20,0x36,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x53,0x74,0x61,0x74, + 0x65,0x5b,0x32,0x35,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x20,0x2b,0x3d,0x20,0x32,0x35,0x20,0x2a,0x20,0x67,0x49,0x64,0x78,0x3b, + 0x0a,0x0a,0x20,0x20,0x20,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x3d,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x69,0x6e,0x74, + 0x2a,0x29,0x28,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x63,0x68,0x61,0x72,0x2a,0x29,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x2b,0x20, + 0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x2a,0x20,0x67,0x49,0x64,0x78,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20, + 0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x69,0x20,0x2b,0x3d,0x20, + 0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x73,0x69,0x7a,0x65,0x28,0x30,0x29,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61, + 0x74,0x65,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x62,0x61, + 0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20, + 0x20,0x66,0x6f,0x72,0x20,0x28,0x75,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x3b,0x20, + 0x69,0x20,0x3c,0x20,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x2f,0x20,0x35,0x31,0x32,0x3b,0x20,0x69,0x20,0x2b,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c, + 0x5f,0x73,0x69,0x7a,0x65,0x28,0x30,0x29,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x65,0x6e,0x65,0x72,0x61,0x74,0x65,0x5f,0x35,0x31,0x32, + 0x28,0x69,0x2c,0x20,0x53,0x74,0x61,0x74,0x65,0x2c,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x2a,0x29,0x28,0x28,0x5f,0x5f, + 0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x63,0x68,0x61,0x72,0x2a,0x29,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x2b,0x20,0x69,0x20,0x2a,0x20,0x35, + 0x31,0x32,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x0a,0x5f,0x5f,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x5f,0x5f,0x28,0x28,0x72, + 0x65,0x71,0x64,0x5f,0x77,0x6f,0x72,0x6b,0x5f,0x67,0x72,0x6f,0x75,0x70,0x5f,0x73,0x69,0x7a,0x65,0x28,0x38,0x2c,0x20,0x38,0x2c,0x20,0x31,0x29,0x29,0x29,0x0a,0x5f, + 0x5f,0x6b,0x65,0x72,0x6e,0x65,0x6c,0x20,0x76,0x6f,0x69,0x64,0x20,0x63,0x6e,0x32,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20, + 0x2a,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x73,0x74,0x61, + 0x74,0x65,0x73,0x2c,0x20,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x6f,0x75,0x74,0x70,0x75,0x74,0x2c,0x20,0x75,0x6c,0x6f,0x6e, + 0x67,0x20,0x54,0x61,0x72,0x67,0x65,0x74,0x2c,0x20,0x75,0x69,0x6e,0x74,0x20,0x54,0x68,0x72,0x65,0x61,0x64,0x73,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f, + 0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x41,0x45,0x53,0x30,0x5b,0x32,0x35,0x36,0x5d,0x2c,0x20,0x41,0x45,0x53,0x31,0x5b,0x32,0x35,0x36,0x5d,0x2c, + 0x20,0x41,0x45,0x53,0x32,0x5b,0x32,0x35,0x36,0x5d,0x2c,0x20,0x41,0x45,0x53,0x33,0x5b,0x32,0x35,0x36,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20, + 0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x5b,0x34,0x30,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x74,0x65,0x78,0x74, + 0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x49,0x64,0x78,0x20,0x3d,0x20,0x67,0x65,0x74,0x49,0x64,0x78,0x28, + 0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69, + 0x64,0x28,0x31,0x29,0x20,0x2a,0x20,0x38,0x20,0x2b,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x3b,0x20,0x69,0x20,0x3c,0x20, + 0x32,0x35,0x36,0x3b,0x20,0x69,0x20,0x2b,0x3d,0x20,0x38,0x20,0x2a,0x20,0x38,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x73,0x74, + 0x20,0x75,0x69,0x6e,0x74,0x20,0x74,0x6d,0x70,0x20,0x3d,0x20,0x41,0x45,0x53,0x30,0x5f,0x43,0x5b,0x69,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41, + 0x45,0x53,0x30,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x74,0x6d,0x70,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,0x45,0x53,0x31,0x5b,0x69,0x5d,0x20,0x3d,0x20, + 0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x6d,0x70,0x2c,0x20,0x38,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,0x45,0x53,0x32,0x5b,0x69,0x5d, + 0x20,0x3d,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x6d,0x70,0x2c,0x20,0x31,0x36,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,0x45,0x53, + 0x33,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x72,0x6f,0x74,0x61,0x74,0x65,0x28,0x74,0x6d,0x70,0x2c,0x20,0x32,0x34,0x55,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a, + 0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29, + 0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x78,0x69,0x6e,0x31,0x5b,0x38,0x5d,0x5b,0x38,0x5d,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x20,0x78,0x69,0x6e,0x32,0x5b,0x38,0x5d,0x5b,0x38,0x5d,0x3b,0x0a,0x0a, + 0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x20,0x2b,0x3d,0x20,0x32,0x35,0x20,0x2a,0x20,0x67,0x49,0x64, + 0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x20,0x2b,0x3d,0x20,0x67,0x49,0x64,0x78,0x20,0x2a,0x20, + 0x28,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x3e,0x3e,0x20,0x34,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x69,0x66,0x20,0x64,0x65,0x66,0x69, + 0x6e,0x65,0x64,0x28,0x5f,0x5f,0x54,0x61,0x68,0x69,0x74,0x69,0x5f,0x5f,0x29,0x20,0x7c,0x7c,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x64,0x28,0x5f,0x5f,0x50,0x69,0x74, + 0x63,0x61,0x69,0x72,0x6e,0x5f,0x5f,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20, + 0x69,0x20,0x3c,0x20,0x34,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x28,0x28,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x2a,0x29,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65, + 0x79,0x32,0x29,0x5b,0x69,0x5d,0x20,0x3d,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x5b,0x69,0x20,0x2b,0x20,0x34,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x76,0x6c,0x6f,0x61,0x64,0x34,0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x2b,0x20, + 0x34,0x2c,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x73,0x74,0x61,0x74,0x65,0x73,0x29,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x23,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x76,0x6c,0x6f,0x61,0x64,0x34, + 0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x2b,0x20,0x34,0x2c,0x20,0x28,0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20, + 0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x73,0x74,0x61,0x74,0x65,0x73,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x38,0x20, + 0x2a,0x29,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x5b,0x30,0x5d,0x20,0x3d,0x20,0x76,0x6c,0x6f,0x61,0x64,0x38,0x28,0x31,0x2c,0x20,0x28, + 0x5f,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x20,0x2a,0x29,0x73,0x74,0x61,0x74,0x65,0x73,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x23,0x65,0x6e,0x64,0x69,0x66,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,0x45,0x53,0x45,0x78,0x70,0x61,0x6e,0x64,0x4b,0x65,0x79,0x32,0x35,0x36, + 0x28,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69, + 0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f, + 0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x2a,0x20,0x78,0x69,0x6e,0x31,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x26,0x78,0x69,0x6e,0x31,0x5b, + 0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x5d,0x5b,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29, + 0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x2a,0x20,0x78,0x69,0x6e,0x31,0x5f,0x6c,0x6f,0x61,0x64,0x20, + 0x3d,0x20,0x26,0x78,0x69,0x6e,0x31,0x5b,0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x2b,0x20,0x31,0x29,0x20,0x25,0x20, + 0x38,0x5d,0x5b,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c, + 0x20,0x75,0x69,0x6e,0x74,0x34,0x2a,0x20,0x78,0x69,0x6e,0x32,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x26,0x78,0x69,0x6e,0x32,0x5b,0x67,0x65,0x74,0x5f,0x6c, + 0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x5d,0x5b,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x5d,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x69,0x6e,0x74,0x34,0x2a,0x20,0x78,0x69,0x6e,0x32,0x5f,0x6c,0x6f,0x61,0x64,0x20,0x3d,0x20,0x26,0x78,0x69, + 0x6e,0x32,0x5b,0x28,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x20,0x2b,0x20,0x31,0x29,0x20,0x25,0x20,0x38,0x5d,0x5b,0x67,0x65, + 0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x2a,0x78,0x69,0x6e,0x32,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20, + 0x3d,0x20,0x28,0x75,0x69,0x6e,0x74,0x34,0x29,0x28,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x32,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x2c,0x20,0x69,0x31,0x20,0x3d,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69, + 0x64,0x28,0x31,0x29,0x3b,0x20,0x69,0x20,0x3c,0x20,0x28,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x3e,0x3e,0x20,0x37,0x29,0x3b,0x20,0x2b,0x2b,0x69,0x2c,0x20,0x69,0x31, + 0x20,0x3d,0x20,0x28,0x69,0x31,0x20,0x2b,0x20,0x31,0x36,0x29,0x20,0x25,0x20,0x28,0x4d,0x45,0x4d,0x4f,0x52,0x59,0x20,0x3e,0x3e,0x20,0x34,0x29,0x29,0x20,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x5b,0x28, + 0x75,0x69,0x6e,0x74,0x29,0x69,0x31,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c, + 0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x2a,0x78,0x69,0x6e,0x32,0x5f,0x6c,0x6f,0x61,0x64,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66, + 0x6f,0x72,0x28,0x69,0x6e,0x74,0x20,0x6a,0x20,0x3d,0x20,0x30,0x3b,0x20,0x6a,0x20,0x3c,0x20,0x31,0x30,0x3b,0x20,0x2b,0x2b,0x6a,0x29,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x28,0x41,0x45,0x53,0x30, + 0x2c,0x20,0x41,0x45,0x53,0x31,0x2c,0x20,0x41,0x45,0x53,0x32,0x2c,0x20,0x41,0x45,0x53,0x33,0x2c,0x20,0x74,0x65,0x78,0x74,0x2c,0x20,0x28,0x28,0x75,0x69,0x6e,0x74, + 0x34,0x20,0x2a,0x29,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x5b,0x6a,0x5d,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x2a,0x78,0x69,0x6e,0x31,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x53,0x63,0x72,0x61,0x74,0x63,0x68,0x70,0x61,0x64,0x5b,0x28,0x75,0x69,0x6e,0x74,0x29,0x69,0x31, + 0x20,0x2b,0x20,0x38,0x75,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f, + 0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65, + 0x78,0x74,0x20,0x5e,0x3d,0x20,0x2a,0x78,0x69,0x6e,0x31,0x5f,0x6c,0x6f,0x61,0x64,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23, + 0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72, + 0x28,0x69,0x6e,0x74,0x20,0x6a,0x20,0x3d,0x20,0x30,0x3b,0x20,0x6a,0x20,0x3c,0x20,0x31,0x30,0x3b,0x20,0x2b,0x2b,0x6a,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x28,0x41,0x45,0x53,0x30,0x2c,0x20, + 0x41,0x45,0x53,0x31,0x2c,0x20,0x41,0x45,0x53,0x32,0x2c,0x20,0x41,0x45,0x53,0x33,0x2c,0x20,0x74,0x65,0x78,0x74,0x2c,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x34,0x20, + 0x2a,0x29,0x45,0x78,0x70,0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x5b,0x6a,0x5d,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x2a,0x78,0x69,0x6e,0x32,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46, + 0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x2a,0x78,0x69,0x6e,0x32,0x5f,0x6c,0x6f,0x61, + 0x64,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x2f,0x2a,0x20,0x41,0x6c,0x73,0x6f,0x20,0x6c,0x65,0x66,0x74,0x20,0x6f,0x76,0x65,0x72,0x20, + 0x74,0x68,0x72,0x65,0x61,0x64,0x73,0x20,0x70,0x65,0x72,0x66,0x6f,0x72,0x6d,0x65,0x20,0x74,0x68,0x69,0x73,0x20,0x6c,0x6f,0x6f,0x70,0x2e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x2a,0x20,0x54,0x68,0x65,0x20,0x6c,0x65,0x66,0x74,0x20,0x6f,0x76,0x65,0x72,0x20,0x74,0x68,0x72,0x65,0x61,0x64,0x20,0x72,0x65,0x73,0x75,0x6c,0x74,0x73,0x20, + 0x77,0x69,0x6c,0x6c,0x20,0x62,0x65,0x20,0x69,0x67,0x6e,0x6f,0x72,0x65,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x2a,0x2f,0x0a,0x20,0x20,0x20,0x20,0x23,0x70,0x72,0x61, + 0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x36,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x28,0x73,0x69,0x7a,0x65,0x5f,0x74,0x20,0x69,0x20,0x3d, + 0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x31,0x36,0x3b,0x20,0x69,0x2b,0x2b,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x23, + 0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x75,0x6e,0x72,0x6f,0x6c,0x6c,0x20,0x31,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e, + 0x74,0x20,0x6a,0x20,0x3d,0x20,0x30,0x3b,0x20,0x6a,0x20,0x3c,0x20,0x31,0x30,0x3b,0x20,0x2b,0x2b,0x6a,0x29,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x3d,0x20,0x41,0x45,0x53,0x5f,0x52,0x6f,0x75,0x6e,0x64,0x28,0x41,0x45,0x53,0x30,0x2c,0x20,0x41,0x45,0x53,0x31,0x2c, + 0x20,0x41,0x45,0x53,0x32,0x2c,0x20,0x41,0x45,0x53,0x33,0x2c,0x20,0x74,0x65,0x78,0x74,0x2c,0x20,0x28,0x28,0x75,0x69,0x6e,0x74,0x34,0x20,0x2a,0x29,0x45,0x78,0x70, + 0x61,0x6e,0x64,0x65,0x64,0x4b,0x65,0x79,0x32,0x29,0x5b,0x6a,0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2a,0x78,0x69,0x6e,0x31,0x5f,0x73,0x74,0x6f,0x72,0x65,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69,0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x4c,0x4f,0x43,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45, + 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x20,0x5e,0x3d,0x20,0x2a,0x78,0x69,0x6e,0x31,0x5f,0x6c,0x6f,0x61,0x64,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x53,0x74,0x61,0x74,0x65,0x5f,0x62,0x75, + 0x66,0x5b,0x38,0x20,0x2a,0x20,0x32,0x35,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x73,0x74,0x6f,0x72,0x65,0x32, + 0x28,0x61,0x73,0x5f,0x75,0x6c,0x6f,0x6e,0x67,0x32,0x28,0x74,0x65,0x78,0x74,0x29,0x2c,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31, + 0x29,0x20,0x2b,0x20,0x34,0x2c,0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x0a,0x20,0x20,0x20,0x20,0x62,0x61,0x72,0x72,0x69, + 0x65,0x72,0x28,0x43,0x4c,0x4b,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x21,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x5f,0x69,0x64,0x28,0x31,0x29,0x29,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5f,0x5f,0x6c,0x6f,0x63,0x61,0x6c,0x20,0x75,0x6c,0x6f,0x6e, + 0x67,0x2a,0x20,0x53,0x74,0x61,0x74,0x65,0x20,0x3d,0x20,0x53,0x74,0x61,0x74,0x65,0x5f,0x62,0x75,0x66,0x20,0x2b,0x20,0x67,0x65,0x74,0x5f,0x6c,0x6f,0x63,0x61,0x6c, + 0x5f,0x69,0x64,0x28,0x30,0x29,0x20,0x2a,0x20,0x32,0x35,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x28,0x69,0x6e, + 0x74,0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x32,0x35,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x53,0x74,0x61,0x74,0x65,0x5b,0x69,0x5d,0x20,0x3d, + 0x20,0x73,0x74,0x61,0x74,0x65,0x73,0x5b,0x69,0x5d,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6b,0x65,0x63,0x63,0x61,0x6b,0x66, + 0x31,0x36,0x30,0x30,0x5f,0x32,0x28,0x53,0x74,0x61,0x74,0x65,0x29,0x3b,0x0a,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x53, + 0x74,0x61,0x74,0x65,0x5b,0x33,0x5d,0x20,0x3c,0x3d,0x20,0x54,0x61,0x72,0x67,0x65,0x74,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x75,0x6c,0x6f,0x6e,0x67,0x20,0x6f,0x75,0x74,0x49,0x64,0x78,0x20,0x3d,0x20, + 0x61,0x74,0x6f,0x6d,0x69,0x63,0x5f,0x69,0x6e,0x63,0x28,0x6f,0x75,0x74,0x70,0x75,0x74,0x20,0x2b,0x20,0x30,0x78,0x46,0x46,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x6f,0x75,0x74,0x49,0x64,0x78,0x20,0x3c,0x20,0x30,0x78,0x46,0x46,0x29,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x70,0x75,0x74,0x5b,0x6f,0x75,0x74,0x49,0x64,0x78,0x5d,0x20, + 0x3d,0x20,0x67,0x65,0x74,0x5f,0x67,0x6c,0x6f,0x62,0x61,0x6c,0x5f,0x69,0x64,0x28,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x6d,0x65,0x6d,0x5f,0x66,0x65,0x6e,0x63,0x65,0x28, + 0x43,0x4c,0x4b,0x5f,0x47,0x4c,0x4f,0x42,0x41,0x4c,0x5f,0x4d,0x45,0x4d,0x5f,0x46,0x45,0x4e,0x43,0x45,0x29,0x3b,0x0a,0x7d,0x0a,0x00 +}; + +} // namespace xmrig diff --git a/src/backend/opencl/kernels/Cn00RyoKernel.cpp b/src/backend/opencl/kernels/Cn00RyoKernel.cpp new file mode 100644 index 00000000..31b33066 --- /dev/null +++ b/src/backend/opencl/kernels/Cn00RyoKernel.cpp @@ -0,0 +1,43 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2017-2018 XMR-Stak , + * Copyright 2018-2019 SChernykh + * Copyright 2016-2019 XMRig , + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "backend/opencl/kernels/Cn00RyoKernel.h" +#include "backend/opencl/wrappers/OclLib.h" + + +bool xmrig::Cn00RyoKernel::enqueue(cl_command_queue queue, size_t threads) +{ + const size_t gthreads = threads * 64; + const size_t lthreads = 64; + + return enqueueNDRange(queue, 1, nullptr, >hreads, <hreads); +} + + +// __kernel void cn00(__global int *Scratchpad, __global ulong *states) +bool xmrig::Cn00RyoKernel::setArgs(cl_mem scratchpads, cl_mem states) +{ + return setArg(0, sizeof(cl_mem), &scratchpads) && setArg(1, sizeof(cl_mem), &states); +} diff --git a/src/backend/opencl/kernels/Cn00RyoKernel.h b/src/backend/opencl/kernels/Cn00RyoKernel.h new file mode 100644 index 00000000..2ad35e35 --- /dev/null +++ b/src/backend/opencl/kernels/Cn00RyoKernel.h @@ -0,0 +1,48 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2017-2018 XMR-Stak , + * Copyright 2018-2019 SChernykh + * Copyright 2016-2019 XMRig , + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef XMRIG_CN00RYOKERNEL_H +#define XMRIG_CN00RYOKERNEL_H + + +#include "backend/opencl/wrappers/OclKernel.h" + + +namespace xmrig { + + +class Cn00RyoKernel : public OclKernel +{ +public: + inline Cn00RyoKernel(cl_program program) : OclKernel(program, "cn00") {} + + bool enqueue(cl_command_queue queue, size_t threads); + bool setArgs(cl_mem scratchpads, cl_mem states); +}; + + +} // namespace xmrig + + +#endif /* XMRIG_CN00RYOKERNEL_H */ diff --git a/src/backend/opencl/kernels/Cn0Kernel.cpp b/src/backend/opencl/kernels/Cn0Kernel.cpp index e75b7415..41040324 100644 --- a/src/backend/opencl/kernels/Cn0Kernel.cpp +++ b/src/backend/opencl/kernels/Cn0Kernel.cpp @@ -27,11 +27,6 @@ #include "backend/opencl/wrappers/OclLib.h" -xmrig::Cn0Kernel::Cn0Kernel(cl_program program) : OclKernel(program, "cn0") -{ -} - - bool xmrig::Cn0Kernel::enqueue(cl_command_queue queue, uint32_t nonce, size_t threads) { const size_t offset[2] = { nonce, 1 }; diff --git a/src/backend/opencl/kernels/Cn0Kernel.h b/src/backend/opencl/kernels/Cn0Kernel.h index 940c0773..91328d17 100644 --- a/src/backend/opencl/kernels/Cn0Kernel.h +++ b/src/backend/opencl/kernels/Cn0Kernel.h @@ -35,7 +35,8 @@ namespace xmrig { class Cn0Kernel : public OclKernel { public: - Cn0Kernel(cl_program program); + inline Cn0Kernel(cl_program program) : OclKernel(program, "cn0") {} + bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads); bool setArgs(cl_mem input, cl_mem scratchpads, cl_mem states, uint32_t threads); }; diff --git a/src/backend/opencl/kernels/Cn1Kernel.h b/src/backend/opencl/kernels/Cn1Kernel.h index 0494f6f3..523ae604 100644 --- a/src/backend/opencl/kernels/Cn1Kernel.h +++ b/src/backend/opencl/kernels/Cn1Kernel.h @@ -37,6 +37,7 @@ class Cn1Kernel : public OclKernel public: Cn1Kernel(cl_program program); Cn1Kernel(cl_program program, uint64_t height); + bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads, size_t worksize); bool setArgs(cl_mem input, cl_mem scratchpads, cl_mem states, uint32_t threads); }; diff --git a/src/backend/opencl/kernels/Cn1RyoKernel.cpp b/src/backend/opencl/kernels/Cn1RyoKernel.cpp new file mode 100644 index 00000000..bec96b7c --- /dev/null +++ b/src/backend/opencl/kernels/Cn1RyoKernel.cpp @@ -0,0 +1,48 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2017-2018 XMR-Stak , + * Copyright 2018-2019 SChernykh + * Copyright 2016-2019 XMRig , + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include + + +#include "backend/opencl/kernels/Cn1RyoKernel.h" +#include "backend/opencl/wrappers/OclLib.h" + + +bool xmrig::Cn1RyoKernel::enqueue(cl_command_queue queue, size_t threads, size_t worksize) +{ + const size_t gthreads = threads * 16; + const size_t lthreads = worksize * 16; + + return enqueueNDRange(queue, 1, nullptr, >hreads, <hreads); +} + + +// __kernel void cn1(__global int *lpad_in, __global int *spad, uint numThreads) +bool xmrig::Cn1RyoKernel::setArgs(cl_mem scratchpads, cl_mem states, uint32_t threads) +{ + return setArg(0, sizeof(cl_mem), &scratchpads) && + setArg(1, sizeof(cl_mem), &states) && + setArg(2, sizeof(uint32_t), &threads); +} diff --git a/src/backend/opencl/kernels/Cn1RyoKernel.h b/src/backend/opencl/kernels/Cn1RyoKernel.h new file mode 100644 index 00000000..6350f516 --- /dev/null +++ b/src/backend/opencl/kernels/Cn1RyoKernel.h @@ -0,0 +1,48 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2017-2018 XMR-Stak , + * Copyright 2018-2019 SChernykh + * Copyright 2016-2019 XMRig , + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef XMRIG_CN1RYOKERNEL_H +#define XMRIG_CN1RYOKERNEL_H + + +#include "backend/opencl/wrappers/OclKernel.h" + + +namespace xmrig { + + +class Cn1RyoKernel : public OclKernel +{ +public: + inline Cn1RyoKernel(cl_program program) : OclKernel(program, "cn1") {} + + bool enqueue(cl_command_queue queue, size_t threads, size_t worksize); + bool setArgs(cl_mem scratchpads, cl_mem states, uint32_t threads); +}; + + +} // namespace xmrig + + +#endif /* XMRIG_CN1RYOKERNEL_H */ diff --git a/src/backend/opencl/kernels/Cn2Kernel.cpp b/src/backend/opencl/kernels/Cn2Kernel.cpp index 0e4a1d17..eaa3b7db 100644 --- a/src/backend/opencl/kernels/Cn2Kernel.cpp +++ b/src/backend/opencl/kernels/Cn2Kernel.cpp @@ -27,11 +27,6 @@ #include "backend/opencl/wrappers/OclLib.h" -xmrig::Cn2Kernel::Cn2Kernel(cl_program program) : OclKernel(program, "cn2") -{ -} - - bool xmrig::Cn2Kernel::enqueue(cl_command_queue queue, uint32_t nonce, size_t threads) { const size_t offset[2] = { nonce, 1 }; diff --git a/src/backend/opencl/kernels/Cn2Kernel.h b/src/backend/opencl/kernels/Cn2Kernel.h index a7b54ab2..d409b611 100644 --- a/src/backend/opencl/kernels/Cn2Kernel.h +++ b/src/backend/opencl/kernels/Cn2Kernel.h @@ -35,7 +35,8 @@ namespace xmrig { class Cn2Kernel : public OclKernel { public: - Cn2Kernel(cl_program program); + inline Cn2Kernel(cl_program program) : OclKernel(program, "cn2") {} + bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads); bool setArgs(cl_mem scratchpads, cl_mem states, const std::vector &branches, uint32_t threads); }; diff --git a/src/backend/opencl/kernels/Cn2RyoKernel.cpp b/src/backend/opencl/kernels/Cn2RyoKernel.cpp new file mode 100644 index 00000000..8824ec26 --- /dev/null +++ b/src/backend/opencl/kernels/Cn2RyoKernel.cpp @@ -0,0 +1,48 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2017-2018 XMR-Stak , + * Copyright 2018-2019 SChernykh + * Copyright 2016-2019 XMRig , + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "backend/opencl/kernels/Cn2RyoKernel.h" +#include "backend/opencl/wrappers/OclLib.h" + + +bool xmrig::Cn2RyoKernel::enqueue(cl_command_queue queue, uint32_t nonce, size_t threads) +{ + const size_t offset[2] = { nonce, 1 }; + const size_t gthreads[2] = { threads, 8 }; + static const size_t lthreads[2] = { 8, 8 }; + + return enqueueNDRange(queue, 2, offset, gthreads, lthreads); +} + + +// __kernel void cn2(__global uint4 *Scratchpad, __global ulong *states, __global uint *output, ulong Target, uint Threads) +bool xmrig::Cn2RyoKernel::setArgs(cl_mem scratchpads, cl_mem states, cl_mem output, uint64_t target, uint32_t threads) +{ + return setArg(0, sizeof(cl_mem), &scratchpads) && + setArg(1, sizeof(cl_mem), &states) && + setArg(2, sizeof(cl_mem), &output) && + setArg(3, sizeof(cl_ulong), &target) && + setArg(4, sizeof(uint32_t), &threads); +} diff --git a/src/backend/opencl/kernels/Cn2RyoKernel.h b/src/backend/opencl/kernels/Cn2RyoKernel.h new file mode 100644 index 00000000..4dbf2a9c --- /dev/null +++ b/src/backend/opencl/kernels/Cn2RyoKernel.h @@ -0,0 +1,48 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2017-2018 XMR-Stak , + * Copyright 2018-2019 SChernykh + * Copyright 2016-2019 XMRig , + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef XMRIG_CN2RYOKERNEL_H +#define XMRIG_CN2RYOKERNEL_H + + +#include "backend/opencl/wrappers/OclKernel.h" + + +namespace xmrig { + + +class Cn2RyoKernel : public OclKernel +{ +public: + inline Cn2RyoKernel(cl_program program) : OclKernel(program, "cn2") {} + + bool enqueue(cl_command_queue queue, uint32_t nonce, size_t threads); + bool setArgs(cl_mem scratchpads, cl_mem states, cl_mem output, uint64_t target, uint32_t threads); +}; + + +} // namespace xmrig + + +#endif /* XMRIG_CN2RYOKERNEL_H */ diff --git a/src/backend/opencl/opencl.cmake b/src/backend/opencl/opencl.cmake index 8974e8c4..b40f5d33 100644 --- a/src/backend/opencl/opencl.cmake +++ b/src/backend/opencl/opencl.cmake @@ -69,6 +69,22 @@ if (WITH_OPENCL) list(APPEND SOURCES_BACKEND_OPENCL src/backend/opencl/runners/OclRxRunner.cpp) endif() + if (WITH_CN_GPU AND CMAKE_SIZEOF_VOID_P EQUAL 8) + list(APPEND HEADERS_BACKEND_OPENCL + src/backend/opencl/kernels/Cn00RyoKernel.h + src/backend/opencl/kernels/Cn1RyoKernel.h + src/backend/opencl/kernels/Cn2RyoKernel.h + src/backend/opencl/runners/OclRyoRunner.h + ) + + list(APPEND SOURCES_BACKEND_OPENCL + src/backend/opencl/kernels/Cn00RyoKernel.cpp + src/backend/opencl/kernels/Cn1RyoKernel.cpp + src/backend/opencl/kernels/Cn2RyoKernel.cpp + src/backend/opencl/runners/OclRyoRunner.cpp + ) + endif() + if (WITH_STRICT_CACHE) add_definitions(/DXMRIG_STRICT_OPENCL_CACHE) else() diff --git a/src/backend/opencl/runners/OclCnRunner.cpp b/src/backend/opencl/runners/OclCnRunner.cpp index e6b1d724..30cb275c 100644 --- a/src/backend/opencl/runners/OclCnRunner.cpp +++ b/src/backend/opencl/runners/OclCnRunner.cpp @@ -81,12 +81,6 @@ xmrig::OclCnRunner::OclCnRunner(size_t index, const OclLaunchData &data) : OclBa m_options += " -DALGO_BASE=" + std::to_string(CnAlgo<>::base(m_algorithm)); m_options += " -DALGO_FAMILY=" + std::to_string(m_algorithm.family()); m_options += " -DCN_UNROLL=" + std::to_string(data.thread.unrollFactor()); - -# ifdef XMRIG_ALGO_CN_GPU - if (data.algorithm == Algorithm::CN_GPU) { - m_options += " -cl-fp32-correctly-rounded-divide-sqrt"; - } -# endif } diff --git a/src/backend/opencl/runners/OclRyoRunner.cpp b/src/backend/opencl/runners/OclRyoRunner.cpp new file mode 100644 index 00000000..3d3183a3 --- /dev/null +++ b/src/backend/opencl/runners/OclRyoRunner.cpp @@ -0,0 +1,185 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2017-2018 XMR-Stak , + * Copyright 2018-2019 SChernykh + * Copyright 2016-2019 XMRig , + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "backend/opencl/runners/OclRyoRunner.h" + +#include "backend/opencl/kernels/Cn00RyoKernel.h" +#include "backend/opencl/kernels/Cn0Kernel.h" +#include "backend/opencl/kernels/Cn1RyoKernel.h" +#include "backend/opencl/kernels/Cn2RyoKernel.h" +#include "backend/opencl/kernels/CnBranchKernel.h" +#include "backend/opencl/OclLaunchData.h" +#include "backend/opencl/wrappers/OclLib.h" +#include "base/io/log/Log.h" +#include "base/net/stratum/Job.h" +#include "crypto/cn/CnAlgo.h" + + +xmrig::OclRyoRunner::OclRyoRunner(size_t index, const OclLaunchData &data) : OclBaseRunner(index, data) +{ + if (m_queue == nullptr) { + return; + } + + const size_t g_thd = data.thread.intensity(); + + cl_int ret; + m_scratchpads = OclLib::createBuffer(m_ctx, CL_MEM_READ_WRITE, data.algorithm.l3() * g_thd, nullptr, &ret); + if (ret != CL_SUCCESS) { + return; + } + + m_states = OclLib::createBuffer(m_ctx, CL_MEM_READ_WRITE, 200 * g_thd, nullptr, &ret); + if (ret != CL_SUCCESS) { + return; + } + + m_options += " -DITERATIONS=" + std::to_string(CnAlgo<>::iterations(m_algorithm)) + "U"; + m_options += " -DMASK=" + std::to_string(CnAlgo<>::mask(m_algorithm)) + "U"; + m_options += " -DWORKSIZE=" + std::to_string(data.thread.worksize()) + "U"; + m_options += " -DMEMORY=" + std::to_string(m_algorithm.l3()) + "LU"; + m_options += " -DCN_UNROLL=" + std::to_string(data.thread.unrollFactor()); + + m_options += " -cl-fp32-correctly-rounded-divide-sqrt"; +} + + +xmrig::OclRyoRunner::~OclRyoRunner() +{ + delete m_cn00; + delete m_cn0; + delete m_cn1; + delete m_cn2; + + OclLib::release(m_scratchpads); + OclLib::release(m_states); +} + + +bool xmrig::OclRyoRunner::isReadyToBuild() const +{ + return OclBaseRunner::isReadyToBuild() && + m_scratchpads != nullptr && + m_states != nullptr; +} + + +bool xmrig::OclRyoRunner::run(uint32_t nonce, uint32_t *hashOutput) +{ + static const cl_uint zero = 0; + + const size_t g_intensity = data().thread.intensity(); + const size_t w_size = data().thread.worksize(); + const size_t g_thd = ((g_intensity + w_size - 1u) / w_size) * w_size; + + assert(g_thd % w_size == 0); + + if (OclLib::enqueueWriteBuffer(m_queue, m_output, CL_FALSE, sizeof(cl_uint) * 0xFF, sizeof(cl_uint), &zero, 0, nullptr, nullptr) != CL_SUCCESS) { + return false; + } + + if (!m_cn0->enqueue(m_queue, nonce, g_thd)) { + return false; + } + + if (!m_cn00->enqueue(m_queue, g_thd)) { + return false; + } + + if (!m_cn1->enqueue(m_queue, g_thd, w_size)) { + return false; + } + + if (!m_cn2->enqueue(m_queue, nonce, g_thd)) { + return false; + } + + if (OclLib::enqueueReadBuffer(m_queue, m_output, CL_TRUE, 0, sizeof(cl_uint) * 0x100, hashOutput, 0, nullptr, nullptr) != CL_SUCCESS) { + return false; + } + + uint32_t &results = hashOutput[0xFF]; + if (results > 0xFF) { + results = 0xFF; + } + + return true; +} + + +bool xmrig::OclRyoRunner::selfTest() const +{ + return OclBaseRunner::selfTest() && m_cn0->isValid() && m_cn00->isValid() && m_cn1->isValid() && m_cn2->isValid(); +} + + +bool xmrig::OclRyoRunner::set(const Job &job, uint8_t *blob) +{ + if (job.size() > (Job::kMaxBlobSize - 4)) { + return false; + } + + blob[job.size()] = 0x01; + memset(blob + job.size() + 1, 0, Job::kMaxBlobSize - job.size() - 1); + + if (OclLib::enqueueWriteBuffer(m_queue, m_input, CL_TRUE, 0, Job::kMaxBlobSize, blob, 0, nullptr, nullptr) != CL_SUCCESS) { + return false; + } + + const uint32_t intensity = data().thread.intensity(); + + if (!m_cn00->setArgs(m_scratchpads, m_states)) { + return false; + } + + if (!m_cn0->setArgs(m_input, m_scratchpads, m_states, intensity)) { + return false; + } + + if (!m_cn1->setArgs(m_scratchpads, m_states, intensity)) { + return false; + } + + if (!m_cn2->setArgs(m_scratchpads, m_states, m_output, job.target(), intensity)) { + return false; + } + + return true; +} + + +void xmrig::OclRyoRunner::build() +{ + OclBaseRunner::build(); + + if (!m_program) { + return; + } + + m_cn00 = new Cn00RyoKernel(m_program); + m_cn0 = new Cn0Kernel(m_program); + m_cn1 = new Cn1RyoKernel(m_program); + m_cn2 = new Cn2RyoKernel(m_program); +} diff --git a/src/backend/opencl/runners/OclRyoRunner.h b/src/backend/opencl/runners/OclRyoRunner.h new file mode 100644 index 00000000..ba4a93e3 --- /dev/null +++ b/src/backend/opencl/runners/OclRyoRunner.h @@ -0,0 +1,74 @@ +/* XMRig + * Copyright 2010 Jeff Garzik + * Copyright 2012-2014 pooler + * Copyright 2014 Lucas Jones + * Copyright 2014-2016 Wolf9466 + * Copyright 2016 Jay D Dee + * Copyright 2017-2018 XMR-Stak , + * Copyright 2018-2019 SChernykh + * Copyright 2016-2019 XMRig , + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef XMRIG_OCLRYORUNNER_H +#define XMRIG_OCLRYORUNNER_H + + +#include "backend/opencl/runners/OclBaseRunner.h" + + +namespace xmrig { + + +class Cn00RyoKernel; +class Cn0Kernel; +class Cn1RyoKernel; +class Cn2RyoKernel; + + +class OclRyoRunner : public OclBaseRunner +{ +public: + OclRyoRunner() = delete; + OclRyoRunner(const OclRyoRunner &other) = delete; + OclRyoRunner(OclRyoRunner &&other) = delete; + OclRyoRunner(size_t index, const OclLaunchData &data); + + ~OclRyoRunner() override; + + OclRyoRunner &operator=(const OclRyoRunner &other) = delete; + OclRyoRunner &operator=(OclRyoRunner &&other) = delete; + +protected: + bool isReadyToBuild() const override; + bool run(uint32_t nonce, uint32_t *hashOutput) override; + bool selfTest() const override; + bool set(const Job &job, uint8_t *blob) override; + void build() override; + +private: + cl_mem m_scratchpads = nullptr; + cl_mem m_states = nullptr; + Cn00RyoKernel *m_cn00 = nullptr; + Cn0Kernel *m_cn0 = nullptr; + Cn1RyoKernel *m_cn1 = nullptr; + Cn2RyoKernel *m_cn2 = nullptr; +}; + + +} /* namespace xmrig */ + + +#endif // XMRIG_OCLRYORUNNER_H diff --git a/src/backend/opencl/wrappers/OclKernel.h b/src/backend/opencl/wrappers/OclKernel.h index e1510e98..d285c687 100644 --- a/src/backend/opencl/wrappers/OclKernel.h +++ b/src/backend/opencl/wrappers/OclKernel.h @@ -29,10 +29,10 @@ #include "base/tools/String.h" -typedef struct _cl_command_queue *cl_command_queue; -typedef struct _cl_kernel *cl_kernel; -typedef struct _cl_mem *cl_mem; -typedef struct _cl_program *cl_program; +using cl_command_queue = struct _cl_command_queue *; +using cl_kernel = struct _cl_kernel *; +using cl_mem = struct _cl_mem *; +using cl_program = struct _cl_program *; namespace xmrig {