aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichal Krol <[email protected]>2006-02-21 12:35:06 +0000
committerMichal Krol <[email protected]>2006-02-21 12:35:06 +0000
commitcc1591667d55a6dbfafbd3d6a7afa9f9288c625d (patch)
treea3ef92d3a8667e830c94db9441089dbadb45e31a /src
parent8986e36f368d11bcf3f1938d77b5df69aa2ee11b (diff)
More GLSL code:
- uniforms (only GetLocation, Uniform1f and Uniform4fv for now for demos); - fix bugs and optimize array size handling; - 2D texture sampling (needs Enable(TEXTURE_2D) to work); - decrease built-in library assembly size by 30%.
Diffstat (limited to 'src')
-rw-r--r--src/mesa/shader/shaderobjects.c121
-rwxr-xr-xsrc/mesa/shader/shaderobjects_3dlabs.c106
-rwxr-xr-xsrc/mesa/shader/slang/library/slang_common_builtin.gc957
-rw-r--r--src/mesa/shader/slang/library/slang_common_builtin_gc.h1075
-rwxr-xr-xsrc/mesa/shader/slang/library/slang_core.gc836
-rw-r--r--src/mesa/shader/slang/library/slang_core_gc.h1161
-rwxr-xr-xsrc/mesa/shader/slang/library/slang_fragment_builtin.gc56
-rw-r--r--src/mesa/shader/slang/library/slang_fragment_builtin_gc.h86
-rwxr-xr-xsrc/mesa/shader/slang/library/slang_vertex_builtin.gc40
-rw-r--r--src/mesa/shader/slang/library/slang_vertex_builtin_gc.h68
-rw-r--r--src/mesa/shader/slang/slang_assemble.c114
-rw-r--r--src/mesa/shader/slang/slang_assemble.h5
-rw-r--r--src/mesa/shader/slang/slang_assemble_assignment.c8
-rw-r--r--src/mesa/shader/slang/slang_assemble_conditional.c50
-rw-r--r--src/mesa/shader/slang/slang_assemble_constructor.c10
-rw-r--r--src/mesa/shader/slang/slang_assemble_typeinfo.c27
-rw-r--r--src/mesa/shader/slang/slang_assemble_typeinfo.h5
-rw-r--r--src/mesa/shader/slang/slang_compile.c246
-rw-r--r--src/mesa/shader/slang/slang_compile.h4
-rw-r--r--src/mesa/shader/slang/slang_compile_struct.c5
-rw-r--r--src/mesa/shader/slang/slang_compile_variable.c217
-rw-r--r--src/mesa/shader/slang/slang_compile_variable.h25
-rw-r--r--src/mesa/shader/slang/slang_execute.c31
-rw-r--r--src/mesa/shader/slang/slang_export.c292
-rw-r--r--src/mesa/shader/slang/slang_export.h114
-rw-r--r--src/mesa/shader/slang/slang_link.c186
-rw-r--r--src/mesa/shader/slang/slang_link.h68
-rw-r--r--src/mesa/shader/slang/slang_storage.c23
-rw-r--r--src/mesa/shader/slang/slang_storage.h7
-rw-r--r--src/mesa/sources2
30 files changed, 2993 insertions, 2952 deletions
diff --git a/src/mesa/shader/shaderobjects.c b/src/mesa/shader/shaderobjects.c
index edd74d0f4a6..7b18e10d8c7 100644
--- a/src/mesa/shader/shaderobjects.c
+++ b/src/mesa/shader/shaderobjects.c
@@ -318,7 +318,9 @@ void GLAPIENTRY
_mesa_UseProgramObjectARB (GLhandleARB programObj)
{
GET_CURRENT_CONTEXT(ctx);
- struct gl2_program_intf **pro;
+ struct gl2_program_intf **pro;
+
+ FLUSH_VERTICES(ctx, _NEW_PROGRAM);
if (programObj == 0)
{
@@ -411,18 +413,71 @@ Errors TODO
Uniform1i{v}ARB is used to load a sampler value.
-*/
-
+*/
+
+#define _RELEASE_PROGRAM(obj)\
+ (**pro)._container._generic._unknown.Release ((struct gl2_unknown_intf **) pro)
+
+#define _LOOKUP_PROGRAM(obj, function)\
+ struct gl2_unknown_intf **unk;\
+ _glthread_LOCK_MUTEX (ctx->Shared->Mutex);\
+ unk = (struct gl2_unknown_intf **) _mesa_HashLookup (ctx->Shared->GL2Objects, obj);\
+ _glthread_UNLOCK_MUTEX (ctx->Shared->Mutex);\
+ if (unk == NULL) {\
+ _mesa_error (ctx, GL_INVALID_VALUE, function);\
+ break;\
+ }\
+ pro = (struct gl2_program_intf **) (**unk).QueryInterface (unk, UIID_PROGRAM);\
+ if (pro == NULL) {\
+ _mesa_error (ctx, GL_INVALID_OPERATION, function);\
+ break;\
+ }
+
+#define _CURRENT_PROGRAM(function)\
+ if (ctx->ShaderObjects.CurrentProgram == NULL) {\
+ _mesa_error (ctx, GL_INVALID_OPERATION, function);\
+ break;\
+ }\
+ pro = ctx->ShaderObjects.CurrentProgram;
+
+#define _IS_LINKED(function)\
+ if ((**pro).GetLinkStatus (pro) == GL_FALSE) {\
+ _mesa_error (ctx, GL_INVALID_OPERATION, function);\
+ _RELEASE_PROGRAM(obj);\
+ break;\
+ }
+
+#define GET_PROGRAM(obj, function)\
+ struct gl2_program_intf **pro = NULL;\
+ do {\
+ _LOOKUP_PROGRAM(obj, function);\
+ } while (0)
+
+#define GET_LINKED_PROGRAM(obj, function)\
+ struct gl2_program_intf **pro = NULL;\
+ do {\
+ _LOOKUP_PROGRAM(obj, function);\
+ _IS_LINKED(function);\
+ } while (0)
+
+#define CURRENT_LINKED_PROGRAM(function)\
+ struct gl2_program_intf **pro = NULL;\
+ do {\
+ _CURRENT_PROGRAM(function);\
+ _IS_LINKED(function);\
+ } while (0)
+
+/* XXX */
+GLboolean _slang_write_uniform (struct gl2_program_intf **, GLint, GLsizei, const GLvoid *, GLenum);
+
void GLAPIENTRY
_mesa_Uniform1fARB (GLint location, GLfloat v0)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- if (ctx->ShaderObjects.CurrentProgram == NULL)
- {
+{
+ GET_CURRENT_CONTEXT(ctx);
+ CURRENT_LINKED_PROGRAM("glUniform1fARB");
+
+ if (!_slang_write_uniform (pro, location, 1, &v0, GL_FLOAT))
_mesa_error (ctx, GL_INVALID_OPERATION, "glUniform1fARB");
- return;
- }
}
void GLAPIENTRY
@@ -548,13 +603,11 @@ _mesa_Uniform3fvARB (GLint location, GLsizei count, const GLfloat *value)
void GLAPIENTRY
_mesa_Uniform4fvARB (GLint location, GLsizei count, const GLfloat *value)
{
- GET_CURRENT_CONTEXT(ctx);
+ GET_CURRENT_CONTEXT(ctx);
+ CURRENT_LINKED_PROGRAM("glUniform4fvARB");
- if (ctx->ShaderObjects.CurrentProgram == NULL)
- {
+ if (!_slang_write_uniform (pro, location, count, value, GL_FLOAT_VEC4_ARB))
_mesa_error (ctx, GL_INVALID_OPERATION, "glUniform4fvARB");
- return;
- }
}
void GLAPIENTRY
@@ -900,43 +953,23 @@ _mesa_GetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei
if (count != NULL)
*count = cnt;
-}
+}
+
+/* XXX */
+GLint _slang_get_uniform_location (struct gl2_program_intf **, const char *);
GLint GLAPIENTRY
_mesa_GetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name)
{
- GET_CURRENT_CONTEXT(ctx);
- struct gl2_unknown_intf **unk;
- struct gl2_program_intf **pro;
+ GET_CURRENT_CONTEXT(ctx);
GLint loc = -1;
+ GET_LINKED_PROGRAM(programObj, "glGetUniformLocationARB");
- _glthread_LOCK_MUTEX (ctx->Shared->Mutex);
- unk = (struct gl2_unknown_intf **) _mesa_HashLookup (ctx->Shared->GL2Objects, programObj);
- _glthread_UNLOCK_MUTEX (ctx->Shared->Mutex);
-
- if (unk == NULL)
- {
- _mesa_error (ctx, GL_INVALID_VALUE, "glGetUniformLocationARB");
- return -1;
- }
-
- pro = (struct gl2_program_intf **) (**unk).QueryInterface (unk, UIID_PROGRAM);
- if (pro == NULL)
- {
- _mesa_error (ctx, GL_INVALID_OPERATION, "glGetUniformLocationARB");
- return -1;
- }
-
- if ((**pro).GetLinkStatus (pro) == GL_FALSE)
- {
- _mesa_error (ctx, GL_INVALID_OPERATION, "glGetUniformLocationARB");
- (**pro)._container._generic._unknown.Release ((struct gl2_unknown_intf **) pro);
+ if (pro == NULL)
return -1;
- }
- /* TODO */
-
- (**pro)._container._generic._unknown.Release ((struct gl2_unknown_intf **) pro);
+ loc = _slang_get_uniform_location (pro, name);
+ _RELEASE_PROGRAM(pro);
return loc;
}
diff --git a/src/mesa/shader/shaderobjects_3dlabs.c b/src/mesa/shader/shaderobjects_3dlabs.c
index 84aba0862e4..6af33226dc2 100755
--- a/src/mesa/shader/shaderobjects_3dlabs.c
+++ b/src/mesa/shader/shaderobjects_3dlabs.c
@@ -44,6 +44,7 @@
#else
#include "slang_utility.h"
#include "slang_compile.h"
+#include "slang_link.h"
#endif
struct gl2_unknown_obj
@@ -683,6 +684,7 @@ struct gl2_program_obj
ShHandle linker;
ShHandle uniforms;
#endif
+ slang_program prog;
};
struct gl2_program_impl
@@ -694,13 +696,13 @@ struct gl2_program_impl
static void
_program_destructor (struct gl2_unknown_intf **intf)
{
-#if USE_3DLABS_FRONTEND
struct gl2_program_impl *impl = (struct gl2_program_impl *) intf;
-
+#if USE_3DLABS_FRONTEND
ShDestruct (impl->_obj.linker);
ShDestruct (impl->_obj.uniforms);
#endif
_container_destructor (intf);
+ slang_program_dtr (&impl->_obj.prog);
}
static struct gl2_unknown_intf **
@@ -759,12 +761,15 @@ _program_Link (struct gl2_program_intf **intf)
struct gl2_program_impl *impl = (struct gl2_program_impl *) intf;
#if USE_3DLABS_FRONTEND
ShHandle *handles;
- GLuint i;
#endif
+ GLuint i, count;
+ slang_translation_unit *units[2];
impl->_obj.link_status = GL_FALSE;
_mesa_free ((void *) impl->_obj._container._generic.info_log);
impl->_obj._container._generic.info_log = NULL;
+ slang_program_dtr (&impl->_obj.prog);
+ slang_program_ctr (&impl->_obj.prog);
#if USE_3DLABS_FRONTEND
handles = (ShHandle *) _mesa_malloc (impl->_obj._container.attached_count * sizeof (ShHandle));
@@ -796,9 +801,30 @@ _program_Link (struct gl2_program_intf **intf)
impl->_obj._container._generic.info_log = _mesa_strdup (ShGetInfoLog (impl->_obj.linker));
#else
- /* TODO: do the real linking */
- impl->_obj.link_status = GL_TRUE;
- impl->_obj._container._generic.info_log = _mesa_strdup ("Link OK.\n");
+ count = impl->_obj._container.attached_count;
+ if (count == 0 || count > 2)
+ return;
+ for (i = 0; i < count; i++)
+ {
+ struct gl2_generic_intf **obj;
+ struct gl2_unknown_intf **unk;
+ struct gl2_shader_impl *sha;
+
+ obj = impl->_obj._container.attached[i];
+ unk = (**obj)._unknown.QueryInterface ((struct gl2_unknown_intf **) obj, UIID_SHADER);
+ (**obj)._unknown.Release ((struct gl2_unknown_intf **) obj);
+ if (unk == NULL)
+ return;
+ sha = (struct gl2_shader_impl *) unk;
+ units[i] = &sha->_obj.unit;
+ (**unk).Release (unk);
+ }
+
+ impl->_obj.link_status = _slang_link (&impl->_obj.prog, units, count);
+ if (impl->_obj.link_status)
+ impl->_obj._container._generic.info_log = _mesa_strdup ("Link OK.\n");
+ else
+ impl->_obj._container._generic.info_log = _mesa_strdup ("Link failed.\n");
#endif
}
@@ -851,6 +877,7 @@ _program_constructor (struct gl2_program_impl *impl)
impl->_obj.linker = ShConstructLinker (EShExVertexFragment, 0);
impl->_obj.uniforms = ShConstructUniformMap ();
#endif
+ slang_program_ctr (&impl->_obj.prog);
}
struct gl2_fragment_shader_obj
@@ -1173,13 +1200,13 @@ void exec_vertex_shader (struct gl2_vertex_shader_intf **vs)
{
slang_function *f;
slang_assembly_file_restore_point point;
- slang_machine mach;
slang_assemble_ctx A;
f = &unit->functions.functions[i];
slang_assembly_file_restore_point_save (unit->assembly, &point);
- mach = *unit->machine;
- mach.ip = unit->assembly->count;
+
+ slang_machine_init (unit->machine);
+ unit->machine->ip = unit->assembly->count;
A.file = unit->assembly;
A.mach = unit->machine;
@@ -1192,9 +1219,9 @@ void exec_vertex_shader (struct gl2_vertex_shader_intf **vs)
_slang_assemble_function_call (&A, f, NULL, 0, GL_FALSE);
slang_assembly_file_push (unit->assembly, slang_asm_exit);
- _slang_execute2 (unit->assembly, &mach);
+ _slang_execute2 (unit->assembly, unit->machine);
+
slang_assembly_file_restore_point_load (unit->assembly, &point);
- _mesa_memcpy (unit->machine->mem, mach.mem, SLANG_MACHINE_MEMORY_SIZE * sizeof (slang_machine_slot));
}
}
@@ -1215,14 +1242,13 @@ void exec_fragment_shader (struct gl2_fragment_shader_intf **fs)
{
slang_function *f;
slang_assembly_file_restore_point point;
- slang_machine mach;
slang_assemble_ctx A;
f = &unit->functions.functions[i];
slang_assembly_file_restore_point_save (unit->assembly, &point);
- mach = *unit->machine;
- mach.ip = unit->assembly->count;
- mach.kill = 0;
+
+ slang_machine_init (unit->machine);
+ unit->machine->ip = unit->assembly->count;
A.file = unit->assembly;
A.mach = unit->machine;
@@ -1235,13 +1261,57 @@ void exec_fragment_shader (struct gl2_fragment_shader_intf **fs)
_slang_assemble_function_call (&A, f, NULL, 0, GL_FALSE);
slang_assembly_file_push (unit->assembly, slang_asm_exit);
- _slang_execute2 (unit->assembly, &mach);
+ _slang_execute2 (unit->assembly, unit->machine);
+
slang_assembly_file_restore_point_load (unit->assembly, &point);
- _mesa_memcpy (unit->machine->mem, mach.mem, SLANG_MACHINE_MEMORY_SIZE * sizeof (slang_machine_slot));
- unit->machine->kill = mach.kill;
}
}
+GLint _slang_get_uniform_location (struct gl2_program_intf **pro, const char *name)
+{
+ struct gl2_program_impl *impl;
+ slang_uniform_bindings *bind;
+ GLuint i;
+
+ impl = (struct gl2_program_impl *) pro;
+ bind = &impl->_obj.prog.uniforms;
+ for (i = 0; i < bind->count; i++)
+ if (_mesa_strcmp (bind->table[i].name, name) == 0)
+ return i;
+ return -1;
+}
+
+GLboolean _slang_write_uniform (struct gl2_program_intf **pro, GLint loc, GLsizei count,
+ const GLvoid *data, GLenum type)
+{
+ struct gl2_program_impl *impl;
+ slang_uniform_bindings *bind;
+ slang_uniform_binding *b;
+ GLuint i;
+
+ if (loc == -1)
+ return GL_TRUE;
+
+ impl = (struct gl2_program_impl *) pro;
+ bind = &impl->_obj.prog.uniforms;
+ if (loc >= bind->count)
+ return GL_FALSE;
+
+ b = &bind->table[loc];
+ /* TODO: check sizes */
+ /* TODO: check if not structure */
+ if (b->quant->u.basic_type != type)
+ return GL_FALSE;
+
+ for (i = 0; i < SLANG_UNIFORM_BINDING_MAX; i++)
+ if (b->address[i] != ~0)
+ {
+ _mesa_memcpy (&impl->_obj.prog.machines[i]->mem[b->address[i] / 4], data,
+ count * b->quant->size);
+ }
+ return GL_TRUE;
+}
+
void
_mesa_init_shaderobjects_3dlabs (GLcontext *ctx)
{
diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc
index c7c27419a91..4d82d54c14d 100755
--- a/src/mesa/shader/slang/library/slang_common_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_common_builtin.gc
@@ -1,7 +1,7 @@
//
// TODO:
-// - implement texture1D, texture2D, texture3D, textureCube,
+// - implement texture1D, texture3D, textureCube,
// - implement shadow1D, shadow2D,
//
@@ -181,27 +181,27 @@ float sin (float angle) {
}
vec2 sin (vec2 angle) {
- vec2 u;
- u.x = sin (angle.x);
- u.y = sin (angle.y);
- return u;
+ return vec2 (
+ sin (angle.x),
+ sin (angle.y)
+ );
}
vec3 sin (vec3 angle) {
- vec3 u;
- u.x = sin (angle.x);
- u.y = sin (angle.y);
- u.z = sin (angle.z);
- return u;
+ return vec3 (
+ sin (angle.x),
+ sin (angle.y),
+ sin (angle.z)
+ );
}
vec4 sin (vec4 angle) {
- vec4 u;
- u.x = sin (angle.x);
- u.y = sin (angle.y);
- u.z = sin (angle.z);
- u.w = sin (angle.w);
- return u;
+ return vec4 (
+ sin (angle.x),
+ sin (angle.y),
+ sin (angle.z),
+ sin (angle.w)
+ );
}
float cos (float angle) {
@@ -209,27 +209,27 @@ float cos (float angle) {
}
vec2 cos (vec2 angle) {
- vec2 u;
- u.x = cos (angle.x);
- u.y = cos (angle.y);
- return u;
+ return vec2 (
+ cos (angle.x),
+ cos (angle.y)
+ );
}
vec3 cos (vec3 angle) {
- vec3 u;
- u.x = cos (angle.x);
- u.y = cos (angle.y);
- u.z = cos (angle.z);
- return u;
+ return vec2 (
+ cos (angle.x),
+ cos (angle.y),
+ cos (angle.z)
+ );
}
vec4 cos (vec4 angle) {
- vec4 u;
- u.x = cos (angle.x);
- u.y = cos (angle.y);
- u.z = cos (angle.z);
- u.w = cos (angle.w);
- return u;
+ return vec4 (
+ cos (angle.x),
+ cos (angle.y),
+ cos (angle.z),
+ cos (angle.w)
+ );
}
float tan (float angle) {
@@ -237,27 +237,27 @@ float tan (float angle) {
}
vec2 tan (vec2 angle) {
- vec2 u;
- u.x = tan (angle.x);
- u.y = tan (angle.y);
- return u;
+ return vec2 (
+ tan (angle.x),
+ tan (angle.y)
+ );
}
vec3 tan (vec3 angle) {
- vec3 u;
- u.x = tan (angle.x);
- u.y = tan (angle.y);
- u.z = tan (angle.z);
- return u;
+ return vec3 (
+ tan (angle.x),
+ tan (angle.y),
+ tan (angle.z)
+ );
}
vec4 tan (vec4 angle) {
- vec4 u;
- u.x = tan (angle.x);
- u.y = tan (angle.y);
- u.z = tan (angle.z);
- u.w = tan (angle.w);
- return u;
+ return vec4 (
+ tan (angle.x),
+ tan (angle.y),
+ tan (angle.z),
+ tan (angle.w)
+ );
}
float asin (float x) {
@@ -267,27 +267,27 @@ float asin (float x) {
}
vec2 asin (vec2 v) {
- vec2 u;
- u.x = asin (v.x);
- u.y = asin (v.y);
- return u;
+ return vec2 (
+ asin (v.x),
+ asin (v.y)
+ );
}
vec3 asin (vec3 v) {
- vec3 u;
- u.x = asin (v.x);
- u.y = asin (v.y);
- u.z = asin (v.z);
- return u;
+ return vec3 (
+ asin (v.x),
+ asin (v.y),
+ asin (v.z)
+ );
}
vec4 asin (vec4 v) {
- vec4 u;
- u.x = asin (v.x);
- u.y = asin (v.y);
- u.z = asin (v.z);
- u.w = asin (v.w);
- return u;
+ return vec4 (
+ asin (v.x),
+ asin (v.y),
+ asin (v.z),
+ asin (v.w)
+ );
}
float acos (float x) {
@@ -295,27 +295,27 @@ float acos (float x) {
}
vec2 acos (vec2 v) {
- vec2 u;
- u.x = acos (v.x);
- u.y = acos (v.y);
- return u;
+ return vec2 (
+ acos (v.x),
+ acos (v.y)
+ );
}
vec3 acos (vec3 v) {
- vec3 u;
- u.x = acos (v.x);
- u.y = acos (v.y);
- u.z = acos (v.z);
- return u;
+ return vec3 (
+ acos (v.x),
+ acos (v.y),
+ acos (v.z)
+ );
}
vec4 acos (vec4 v) {
- vec4 u;
- u.x = acos (v.x);
- u.y = acos (v.y);
- u.z = acos (v.z);
- u.w = acos (v.w);
- return u;
+ return vec4 (
+ acos (v.x),
+ acos (v.y),
+ acos (v.z),
+ acos (v.w)
+ );
}
float atan (float y_over_x) {
@@ -325,27 +325,27 @@ float atan (float y_over_x) {
}
vec2 atan (vec2 y_over_x) {
- vec2 u;
- u.x = atan (y_over_x.x);
- u.y = atan (y_over_x.y);
- return u;
+ return vec2 (
+ atan (y_over_x.x),
+ atan (y_over_x.y)
+ );
}
vec3 atan (vec3 y_over_x) {
- vec3 u;
- u.x = atan (y_over_x.x);
- u.y = atan (y_over_x.y);
- u.z = atan (y_over_x.z);
- return u;
+ return vec3 (
+ atan (y_over_x.x),
+ atan (y_over_x.y),
+ atan (y_over_x.z)
+ );
}
vec4 atan (vec4 y_over_x) {
- vec4 u;
- u.x = atan (y_over_x.x);
- u.y = atan (y_over_x.y);
- u.z = atan (y_over_x.z);
- u.w = atan (y_over_x.w);
- return u;
+ return vec4 (
+ atan (y_over_x.x),
+ atan (y_over_x.y),
+ atan (y_over_x.z),
+ atan (y_over_x.w)
+ );
}
float atan (float y, float x) {
@@ -361,27 +361,27 @@ float atan (float y, float x) {
}
vec2 atan (vec2 u, vec2 v) {
- vec2 t;
- t.x = atan (u.x, v.x);
- t.y = atan (u.y, v.y);
- return t;
+ return vec2 (
+ atan (u.x, v.x),
+ atan (u.y, v.y)
+ );
}
vec3 atan (vec3 u, vec3 v) {
- vec3 t;
- t.x = atan (u.x, v.x);
- t.y = atan (u.y, v.y);
- t.z = atan (u.z, v.z);
- return t;
+ return vec3 (
+ atan (u.x, v.x),
+ atan (u.y, v.y),
+ atan (u.z, v.z)
+ );
}
vec4 atan (vec4 u, vec4 v) {
- vec4 t;
- t.x = atan (u.x, v.x);
- t.y = atan (u.y, v.y);
- t.z = atan (u.z, v.z);
- t.w = atan (u.w, v.w);
- return t;
+ return vec4 (
+ atan (u.x, v.x),
+ atan (u.y, v.y),
+ atan (u.z, v.z),
+ atan (u.w, v.w)
+ );
}
//
@@ -395,27 +395,27 @@ float pow (float x, float y) {
}
vec2 pow (vec2 v, vec2 u) {
- vec2 t;
- t.x = pow (v.x, u.x);
- t.y = pow (v.y, u.y);
- return t;
+ return vec2 (
+ pow (v.x, u.x),
+ pow (v.y, u.y)
+ );
}
vec3 pow (vec3 v, vec3 u) {
- vec3 t;
- t.x = pow (v.x, u.x);
- t.y = pow (v.y, u.y);
- t.z = pow (v.z, u.z);
- return t;
+ return vec3 (
+ pow (v.x, u.x),
+ pow (v.y, u.y),
+ pow (v.z, u.z)
+ );
}
vec4 pow (vec4 v, vec4 u) {
- vec4 t;
- t.x = pow (v.x, u.x);
- t.y = pow (v.y, u.y);
- t.z = pow (v.z, u.z);
- t.w = pow (v.w, u.w);
- return t;
+ return vec4 (
+ pow (v.x, u.x),
+ pow (v.y, u.y),
+ pow (v.z, u.z),
+ pow (v.w, u.w)
+ );
}
float exp (float x) {
@@ -441,27 +441,27 @@ float log2 (float x) {
}
vec2 log2 (vec2 v) {
- vec2 u;
- u.x = log2 (v.x);
- u.y = log2 (v.y);
- return u;
+ return vec2 (
+ log2 (v.x),
+ log2 (v.y)
+ );
}
vec3 log2 (vec3 v) {
- vec3 u;
- u.x = log2 (v.x);
- u.y = log2 (v.y);
- u.z = log2 (v.z);
- return u;
+ return vec3 (
+ log2 (v.x),
+ log2 (v.y),
+ log2 (v.z)
+ );
}
vec4 log2 (vec4 v) {
- vec4 u;
- u.x = log2 (v.x);
- u.y = log2 (v.y);
- u.z = log2 (v.z);
- u.w = log2 (v.w);
- return u;
+ return vec4 (
+ log2 (v.x),
+ log2 (v.y),
+ log2 (v.z),
+ log2 (v.w)
+ );
}
float log (float x) {
@@ -537,27 +537,27 @@ float abs (float x) {
}
vec2 abs (vec2 v) {
- vec2 u;
- u.x = abs (v.x);
- u.y = abs (v.y);
- return u;
+ return vec2 (
+ abs (v.x),
+ abs (v.y)
+ );
}
vec3 abs (vec3 v) {
- vec3 u;
- u.x = abs (v.x);
- u.y = abs (v.y);
- u.z = abs (v.z);
- return u;
+ return vec3 (
+ abs (v.x),
+ abs (v.y),
+ abs (v.z)
+ );
}
vec4 abs (vec4 v) {
- vec4 u;
- u.x = abs (v.x);
- u.y = abs (v.y);
- u.z = abs (v.z);
- u.w = abs (v.w);
- return u;
+ return vec4 (
+ abs (v.x),
+ abs (v.y),
+ abs (v.z),
+ abs (v.w)
+ );
}
float sign (float x) {
@@ -565,27 +565,27 @@ float sign (float x) {
}
vec2 sign (vec2 v) {
- vec2 u;
- u.x = sign (v.x);
- u.y = sign (v.y);
- return u;
+ return vec2 (
+ sign (v.x),
+ sign (v.y)
+ );
}
vec3 sign (vec3 v) {
- vec3 u;
- u.x = sign (v.x);
- u.y = sign (v.y);
- u.z = sign (v.z);
- return u;
+ return vec3 (
+ sign (v.x),
+ sign (v.y),
+ sign (v.z)
+ );
}
vec4 sign (vec4 v) {
- vec4 u;
- u.x = sign (v.x);
- u.y = sign (v.y);
- u.z = sign (v.z);
- u.w = sign (v.w);
- return u;
+ return vec4 (
+ sign (v.x),
+ sign (v.y),
+ sign (v.z),
+ sign (v.w)
+ );
}
float floor (float x) {
@@ -595,27 +595,27 @@ float floor (float x) {
}
vec2 floor (vec2 v) {
- vec2 u;
- u.x = floor (v.x);
- u.y = floor (v.y);
- return u;
+ return vec2 (
+ floor (v.x),
+ floor (v.y)
+ );
}
vec3 floor (vec3 v) {
- vec3 u;
- u.x = floor (v.x);
- u.y = floor (v.y);
- u.z = floor (v.z);
- return u;
+ return vec3 (
+ floor (v.x),
+ floor (v.y),
+ floor (v.z)
+ );
}
vec4 floor (vec4 v) {
- vec4 u;
- u.x = floor (v.x);
- u.y = floor (v.y);
- u.z = floor (v.z);
- u.w = floor (v.w);
- return u;
+ return vec4 (
+ floor (v.x),
+ floor (v.y),
+ floor (v.z),
+ floor (v.w)
+ );
}
float ceil (float x) {
@@ -625,27 +625,27 @@ float ceil (float x) {
}
vec2 ceil (vec2 v) {
- vec2 u;
- u.x = ceil (v.x);
- u.y = ceil (v.y);
- return u;
+ return vec2 (
+ ceil (v.x),
+ ceil (v.y)
+ );
}
vec3 ceil (vec3 v) {
- vec3 u;
- u.x = ceil (v.x);
- u.y = ceil (v.y);
- u.z = ceil (v.z);
- return u;
+ return vec3 (
+ ceil (v.x),
+ ceil (v.y),
+ ceil (v.z)
+ );
}
vec4 ceil (vec4 v) {
- vec4 u;
- u.x = ceil (v.x);
- u.y = ceil (v.y);
- u.z = ceil (v.z);
- u.w = ceil (v.w);
- return u;
+ return vec4 (
+ ceil (v.x),
+ ceil (v.y),
+ ceil (v.z),
+ ceil (v.w)
+ );
}
float fract (float x) {
@@ -697,27 +697,27 @@ float min (float x, float y) {
}
vec2 min (vec2 v, vec2 u) {
- vec2 t;
- t.x = min (v.x, u.x);
- t.y = min (v.y, u.y);
- return t;
+ return vec2 (
+ min (v.x, u.x),
+ min (v.y, u.y)
+ );
}
vec3 min (vec3 v, vec3 u) {
- vec3 t;
- t.x = min (v.x, u.x);
- t.y = min (v.y, u.y);
- t.z = min (v.z, u.z);
- return t;
+ return vec2 (
+ min (v.x, u.x),
+ min (v.y, u.y),
+ min (v.z, u.z)
+ );
}
vec4 min (vec4 v, vec4 u) {
- vec4 t;
- t.x = min (v.x, u.x);
- t.y = min (v.y, u.y);
- t.z = min (v.z, u.z);
- t.w = min (v.w, u.w);
- return t;
+ return vec4 (
+ min (v.x, u.x),
+ min (v.y, u.y),
+ min (v.z, u.z),
+ min (v.w, u.w)
+ );
}
vec2 min (vec2 v, float y) {
@@ -737,27 +737,27 @@ float max (float x, float y) {
}
vec2 max (vec2 v, vec2 u) {
- vec2 t;
- t.x = max (v.x, u.x);
- t.y = max (v.y, u.y);
- return t;
+ return vec2 (
+ max (v.x, u.x),
+ max (v.y, u.y)
+ );
}
vec3 max (vec3 v, vec3 u) {
- vec3 t;
- t.x = max (v.x, u.x);
- t.y = max (v.y, u.y);
- t.z = max (v.z, u.z);
- return t;
+ return vec3 (
+ max (v.x, u.x),
+ max (v.y, u.y),
+ max (v.z, u.z)
+ );
}
vec4 max (vec4 v, vec4 u) {
- vec4 t;
- t.x = max (v.x, u.x);
- t.y = max (v.y, u.y);
- t.z = max (v.z, u.z);
- t.w = max (v.w, u.w);
- return t;
+ return vec4 (
+ max (v.x, u.x),
+ max (v.y, u.y),
+ max (v.z, u.z),
+ max (v.w, u.w)
+ );
}
vec2 max (vec2 v, float y) {
@@ -833,27 +833,27 @@ float step (float edge, float x) {
}
vec2 step (vec2 edge, vec2 v) {
- vec2 u;
- u.x = step (edge.x, v.x);
- u.y = step (edge.y, v.y);
- return u;
+ return vec2 (
+ step (edge.x, v.x),
+ step (edge.y, v.y)
+ );
}
vec3 step (vec3 edge, vec3 v) {
- vec3 u;
- u.x = step (edge.x, v.x);
- u.y = step (edge.y, v.y);
- u.z = step (edge.z, v.z);
- return u;
+ return vec3 (
+ step (edge.x, v.x),
+ step (edge.y, v.y),
+ step (edge.z, v.z)
+ );
}
vec4 step (vec4 edge, vec4 v) {
- vec4 u;
- u.x = step (edge.x, v.x);
- u.y = step (edge.y, v.y);
- u.z = step (edge.z, v.z);
- u.w = step (edge.w, v.w);
- return u;
+ return vec4 (
+ step (edge.x, v.x),
+ step (edge.y, v.y),
+ step (edge.z, v.z),
+ step (edge.w, v.w)
+ );
}
vec2 step (float edge, vec2 v) {
@@ -875,51 +875,51 @@ float smoothstep (float edge0, float edge1, float x) {
}
vec2 smoothstep (vec2 edge0, vec2 edge1, vec2 v) {
- vec2 u;
- u.x = smoothstep (edge0.x, edge1.x, v.x);
- u.y = smoothstep (edge0.y, edge1.y, v.y);
- return u;
+ return vec2 (
+ smoothstep (edge0.x, edge1.x, v.x),
+ smoothstep (edge0.y, edge1.y, v.y)
+ );
}
vec3 smoothstep (vec3 edge0, vec3 edge1, vec3 v) {
- vec3 u;
- u.x = smoothstep (edge0.x, edge1.x, v.x);
- u.y = smoothstep (edge0.y, edge1.y, v.y);
- u.z = smoothstep (edge0.z, edge1.z, v.z);
- return u;
+ return vec3 (
+ smoothstep (edge0.x, edge1.x, v.x),
+ smoothstep (edge0.y, edge1.y, v.y),
+ smoothstep (edge0.z, edge1.z, v.z)
+ );
}
vec4 smoothstep (vec4 edge0, vec4 edge1, vec4 v) {
- vec4 u;
- u.x = smoothstep (edge0.x, edge1.x, v.x);
- u.y = smoothstep (edge0.y, edge1.y, v.y);
- u.z = smoothstep (edge0.z, edge1.z, v.z);
- u.w = smoothstep (edge0.w, edge1.w, v.w);
- return u;
+ return vec4 (
+ smoothstep (edge0.x, edge1.x, v.x),
+ smoothstep (edge0.y, edge1.y, v.y),
+ smoothstep (edge0.z, edge1.z, v.z),
+ smoothstep (edge0.w, edge1.w, v.w)
+ );
}
vec2 smoothstep (float edge0, float edge1, vec2 v) {
- vec2 u;
- u.x = smoothstep (edge0, edge1, v.x);
- u.y = smoothstep (edge0, edge1, v.y);
- return u;
+ return vec2 (
+ smoothstep (edge0, edge1, v.x),
+ smoothstep (edge0, edge1, v.y)
+ );
}
vec3 smoothstep (float edge0, float edge1, vec3 v) {
- vec3 u;
- u.x = smoothstep (edge0, edge1, v.x);
- u.y = smoothstep (edge0, edge1, v.y);
- u.z = smoothstep (edge0, edge1, v.z);
- return u;
+ return vec3 (
+ smoothstep (edge0, edge1, v.x),
+ smoothstep (edge0, edge1, v.y),
+ smoothstep (edge0, edge1, v.z)
+ );
}
vec4 smoothstep (float edge0, float edge1, vec4 v) {
- vec4 u;
- u.x = smoothstep (edge0, edge1, v.x);
- u.y = smoothstep (edge0, edge1, v.y);
- u.z = smoothstep (edge0, edge1, v.z);
- u.w = smoothstep (edge0, edge1, v.w);
- return u;
+ return vec4 (
+ smoothstep (edge0, edge1, v.x),
+ smoothstep (edge0, edge1, v.y),
+ smoothstep (edge0, edge1, v.z),
+ smoothstep (edge0, edge1, v.w)
+ );
}
//
@@ -975,11 +975,11 @@ float distance (vec4 v, vec4 u) {
}
vec3 cross (vec3 v, vec3 u) {
- vec3 t;
- t.x = v.y * u.z - u.y * v.z;
- t.y = v.z * u.x - u.z * v.x;
- t.z = v.x * u.y - u.x * v.y;
- return t;
+ return vec3 (
+ v.y * u.z - u.y * v.z,
+ v.z * u.x - u.z * v.x,
+ v.x * u.y - u.x * v.y
+ );
}
float normalize (float x) {
@@ -1067,27 +1067,15 @@ vec4 refract (vec4 I, vec4 N, float eta) {
//
mat2 matrixCompMult (mat2 m, mat2 n) {
- mat2 o;
- o[0] = m[0] * n[0];
- o[1] = m[1] * n[1];
- return o;
+ return mat2 (m[0] * n[0], m[1] * n[1]);
}
mat3 matrixCompMult (mat3 m, mat3 n) {
- mat3 o;
- o[0] = m[0] * n[0];
- o[1] = m[1] * n[1];
- o[2] = m[2] * n[2];
- return o;
+ return mat3 (m[0] * n[0], m[1] * n[1], m[2] * n[2]);
}
mat4 matrixCompMult (mat4 m, mat4 n) {
- mat4 o;
- o[0] = m[0] * n[0];
- o[1] = m[1] * n[1];
- o[2] = m[2] * n[2];
- o[3] = m[3] * n[3];
- return o;
+ return mat4 (m[0] * n[0], m[1] * n[1], m[2] * n[2], m[3] * n[3]);
}
//
@@ -1095,291 +1083,147 @@ mat4 matrixCompMult (mat4 m, mat4 n) {
//
bvec2 lessThan (vec2 v, vec2 u) {
- bvec2 b;
- b.x = v.x < u.x;
- b.y = v.y < u.y;
- return b;
+ return bvec2 (v.x < u.x, v.y < u.y);
}
bvec3 lessThan (vec3 v, vec3 u) {
- bvec3 b;
- b.x = v.x < u.x;
- b.y = v.y < u.y;
- b.z = v.z < u.z;
- return b;
+ return bvec3 (v.x < u.x, v.y < u.y, v.z < u.z);
}
bvec4 lessThan (vec4 v, vec4 u) {
- bvec4 b;
- b.x = v.x < u.x;
- b.y = v.y < u.y;
- b.z = v.z < u.z;
- b.w = v.w < u.w;
- return b;
+ return bvec4 (v.x < u.x, v.y < u.y, v.z < u.z, v.w < u.w);
}
bvec2 lessThan (ivec2 v, ivec2 u) {
- bvec2 b;
- b.x = v.x < u.x;
- b.y = v.y < u.y;
- return b;
+ return bvec2 (v.x < u.x, v.y < u.y);
}
bvec3 lessThan (ivec3 v, ivec3 u) {
- bvec3 b;
- b.x = v.x < u.x;
- b.y = v.y < u.y;
- b.z = v.z < u.z;
- return b;
+ return bvec3 (v.x < u.x, v.y < u.y, v.z < u.z);
}
bvec4 lessThan (ivec4 v, ivec4 u) {
- bvec4 b;
- b.x = v.x < u.x;
- b.y = v.y < u.y;
- b.z = v.z < u.z;
- b.w = v.w < u.w;
- return b;
+ return bvec4 (v.x < u.x, v.y < u.y, v.z < u.z, v.w < u.w);
}
bvec2 lessThanEqual (vec2 v, vec2 u) {
- bvec2 b;
- b.x = v.x <= u.x;
- b.y = v.y <= u.y;
- return b;
+ return bvec2 (v.x <= u.x, v.y <= u.y);
}
bvec3 lessThanEqual (vec3 v, vec3 u) {
- bvec3 b;
- b.x = v.x <= u.x;
- b.y = v.y <= u.y;
- b.z = v.z <= u.z;
- return b;
+ return bvec3 (v.x <= u.x, v.y <= u.y, v.z <= u.z);
}
bvec4 lessThanEqual (vec4 v, vec4 u) {
- bvec4 b;
- b.x = v.x <= u.x;
- b.y = v.y <= u.y;
- b.z = v.z <= u.z;
- b.w = v.w <= u.w;
- return b;
+ return bvec4 (v.x <= u.x, v.y <= u.y, v.z <= u.z, v.w <= u.w);
}
bvec2 lessThanEqual (ivec2 v, ivec2 u) {
- bvec2 b;
- b.x = v.x <= u.x;
- b.y = v.y <= u.y;
- return b;
+ return bvec2 (v.x <= u.x, v.y <= u.y);
}
bvec3 lessThanEqual (ivec3 v, ivec3 u) {
- bvec3 b;
- b.x = v.x <= u.x;
- b.y = v.y <= u.y;
- b.z = v.z <= u.z;
- return b;
+ return bvec3 (v.x <= u.x, v.y <= u.y, v.z <= u.z);
}
bvec4 lessThanEqual (ivec4 v, ivec4 u) {
- bvec4 b;
- b.x = v.x <= u.x;
- b.y = v.y <= u.y;
- b.z = v.z <= u.z;
- b.w = v.w <= u.w;
- return b;
+ return bvec4 (v.x <= u.x, v.y <= u.y, v.z <= u.z, v.w <= u.w);
}
bvec2 greaterThan (vec2 v, vec2 u) {
- bvec2 b;
- b.x = v.x > u.x;
- b.y = v.y > u.y;
- return b;
+ return bvec2 (v.x > u.x, v.y > u.y);
}
bvec3 greaterThan (vec3 v, vec3 u) {
- bvec3 b;
- b.x = v.x > u.x;
- b.y = v.y > u.y;
- b.z = v.z > u.z;
- return b;
+ return bvec3 (v.x > u.x, v.y > u.y, v.z > u.z);
}
bvec4 greaterThan (vec4 v, vec4 u) {
- bvec4 b;
- b.x = v.x > u.x;
- b.y = v.y > u.y;
- b.z = v.z > u.z;
- b.w = v.w > u.w;
- return b;
+ return bvec4 (v.x > u.x, v.y > u.y, v.z > u.z, v.w > u.w);
}
bvec2 greaterThan (ivec2 v, ivec2 u) {
- bvec2 b;
- b.x = v.x > u.x;
- b.y = v.y > u.y;
- return b;
+ return bvec2 (v.x > u.x, v.y > u.y);
}
bvec3 greaterThan (ivec3 v, ivec3 u) {
- bvec3 b;
- b.x = v.x > u.x;
- b.y = v.y > u.y;
- b.z = v.z > u.z;
- return b;
+ return bvec3 (v.x > u.x, v.y > u.y, v.z > u.z);
}
bvec4 greaterThan (ivec4 v, ivec4 u) {
- bvec4 b;
- b.x = v.x > u.x;
- b.y = v.y > u.y;
- b.z = v.z > u.z;
- b.w = v.w > u.w;
- return b;
+ return bvec4 (v.x > u.x, v.y > u.y, v.z > u.z, v.w > u.w);
}
bvec2 greaterThanEqual (vec2 v, vec2 u) {
- bvec2 b;
- b.x = v.x >= u.x;
- b.y = v.y >= u.y;
- return b;
+ return bvec2 (v.x >= u.x, v.y >= u.y);
}
bvec3 greaterThanEqual (vec3 v, vec3 u) {
- bvec3 b;
- b.x = v.x >= u.x;
- b.y = v.y >= u.y;
- b.z = v.z >= u.z;
- return b;
+ return bvec3 (v.x >= u.x, v.y >= u.y, v.z >= u.z);
}
bvec4 greaterThanEqual (vec4 v, vec4 u) {
- bvec4 b;
- b.x = v.x >= u.x;
- b.y = v.y >= u.y;
- b.z = v.z >= u.z;
- b.w = v.w >= u.w;
- return b;
+ return bvec4 (v.x >= u.x, v.y >= u.y, v.z >= u.z, v.w >= u.w);
}
bvec2 greaterThanEqual (ivec2 v, ivec2 u) {
- bvec2 b;
- b.x = v.x >= u.x;
- b.y = v.y >= u.y;
- return b;
+ return bvec2 (v.x >= u.x, v.y >= u.y);
}
bvec3 greaterThanEqual (ivec3 v, ivec3 u) {
- bvec3 b;
- b.x = v.x >= u.x;
- b.y = v.y >= u.y;
- b.z = v.z >= u.z;
- return b;
+ return bvec3 (v.x >= u.x, v.y >= u.y, v.z >= u.z);
}
bvec4 greaterThanEqual (ivec4 v, ivec4 u) {
- bvec4 b;
- b.x = v.x >= u.x;
- b.y = v.y >= u.y;
- b.z = v.z >= u.z;
- b.w = v.w >= u.w;
- return b;
+ return bvec4 (v.x >= u.x, v.y >= u.y, v.z >= u.z, v.w >= u.w);
}
bvec2 equal (vec2 v, vec2 u) {
- bvec2 b;
- b.x = v.x == u.x;
- b.y = v.y == u.y;
- return b;
+ return bvec2 (v.x == u.x, v.y == u.y);
}
bvec3 equal (vec3 v, vec3 u) {
- bvec3 b;
- b.x = v.x == u.x;
- b.y = v.y == u.y;
- b.z = v.z == u.z;
- return b;
+ return bvec3 (v.x == u.x, v.y == u.y, v.z == u.z);
}
bvec4 equal (vec4 v, vec4 u) {
- bvec4 b;
- b.x = v.x == u.x;
- b.y = v.y == u.y;
- b.z = v.z == u.z;
- b.w = v.w == u.w;
- return b;
+ return bvec4 (v.x == u.x, v.y == u.y, v.z == u.z, v.w == u.w);
}
bvec2 equal (ivec2 v, ivec2 u) {
- bvec2 b;
- b.x = v.x == u.x;
- b.y = v.y == u.y;
- return b;
+ return bvec2 (v.x == u.x, v.y == u.y);
}
bvec3 equal (ivec3 v, ivec3 u) {
- bvec3 b;
- b.x = v.x == u.x;
- b.y = v.y == u.y;
- b.z = v.z == u.z;
- return b;
+ return bvec3 (v.x == u.x, v.y == u.y, v.z == u.z);
}
bvec4 equal (ivec4 v, ivec4 u) {
- bvec4 b;
- b.x = v.x == u.x;
- b.y = v.y == u.y;
- b.z = v.z == u.z;
- b.w = v.w == u.w;
- return b;
+ return bvec4 (v.x == u.x, v.y == u.y, v.z == u.z, v.w == u.w);
}
bvec2 notEqual (vec2 v, vec2 u) {
- bvec2 b;
- b.x = v.x != u.x;
- b.y = v.y != u.y;
- return b;
+ return bvec2 (v.x != u.x, v.y != u.y);
}
bvec3 notEqual (vec3 v, vec3 u) {
- bvec3 b;
- b.x = v.x != u.x;
- b.y = v.y != u.y;
- b.z = v.z != u.z;
- return b;
+ return bvec3 (v.x != u.x, v.y != u.y, v.z != u.z);
}
bvec4 notEqual (vec4 v, vec4 u) {
- bvec4 b;
- b.x = v.x != u.x;
- b.y = v.y != u.y;
- b.z = v.z != u.z;
- b.w = v.w != u.w;
- return b;
+ return bvec4 (v.x != u.x, v.y != u.y, v.z != u.z, v.w != u.w);
}
bvec2 notEqual (ivec2 v, ivec2 u) {
- bvec2 b;
- b.x = v.x != u.x;
- b.y = v.y != u.y;
- return b;
+ return bvec2 (v.x != u.x, v.y != u.y);
}
bvec3 notEqual (ivec3 v, ivec3 u) {
- bvec3 b;
- b.x = v.x != u.x;
- b.y = v.y != u.y;
- b.z = v.z != u.z;
- return b;
+ return bvec3 (v.x != u.x, v.y != u.y, v.z != u.z);
}
bvec4 notEqual (ivec4 v, ivec4 u) {
- bvec4 b;
- b.x = v.x != u.x;
- b.y = v.y != u.y;
- b.z = v.z != u.z;
- b.w = v.w != u.w;
- return b;
+ return bvec4 (v.x != u.x, v.y != u.y, v.z != u.z, v.w != u.w);
}
bool any (bvec2 v) {
@@ -1407,27 +1251,15 @@ bool all (bvec4 v) {
}
bvec2 not (bvec2 v) {
- bvec2 u;
- u.x = !v.x;
- u.y = !v.y;
- return u;
+ return bvec2 (!v.x, !v.y);
}
bvec3 not (bvec3 v) {
- bvec3 u;
- u.x = !v.x;
- u.y = !v.y;
- u.z = !v.z;
- return u;
+ return bvec3 (!v.x, !v.y, !v.z);
}
bvec4 not (bvec4 v) {
- bvec4 u;
- u.x = !v.x;
- u.y = !v.y;
- u.z = !v.z;
- u.w = !v.w;
- return u;
+ return bvec4 (!v.x, !v.y, !v.z, !v.w);
}
//
@@ -1448,22 +1280,17 @@ vec4 texture1DProj (sampler1D sampler, vec4 coord) {
}
vec4 texture2D (sampler2D sampler, vec2 coord) {
- // XXX:
- return vec4 (0.0);
+ vec4 texel;
+ __asm vec4_tex2d texel, sampler, coord;
+ return texel;
}
vec4 texture2DProj (sampler2D sampler, vec3 coord) {
- vec2 u;
- u.s = coord.s / coord.p;
- u.t = coord.t / coord.p;
- return texture2D (sampler, u);
+ return texture2D (sampler, vec2 (coord.s / coord.p, coord.t / coord.p));
}
vec4 texture2DProj (sampler2D sampler, vec4 coord) {
- vec2 u;
- u.s = coord.s / coord.q;
- u.t = coord.t / coord.q;
- return texture2D (sampler, u);
+ return texture2D (sampler, vec2 (coord.s / coord.q, coord.t / coord.q));
}
vec4 texture3D (sampler3D sampler, vec3 coord) {
@@ -1472,11 +1299,7 @@ vec4 texture3D (sampler3D sampler, vec3 coord) {
}
vec4 texture3DProj (sampler3D sampler, vec4 coord) {
- vec3 u;
- u.s = coord.s / coord.q;
- u.t = coord.t / coord.q;
- u.p = coord.p / coord.q;
- return texture3D (sampler, u);
+ return texture3D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q));
}
vec4 textureCube (samplerCube sampler, vec3 coord) {
@@ -1495,19 +1318,11 @@ vec4 shadow2D (sampler2DShadow sampler, vec3 coord) {
}
vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord) {
- vec3 u;
- u.s = coord.s / coord.q;
- u.t = 0.0;
- u.p = coord.p / coord.q;
- return shadow1D (sampler, u);
+ return shadow1D (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q));
}
vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord) {
- vec3 u;
- u.s = coord.s / coord.q;
- u.t = coord.t / coord.q;
- u.p = coord.p / coord.q;
- return shadow2D (sampler, u);
+ return shadow2D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q));
}
//
@@ -1541,98 +1356,98 @@ float noise1 (vec4 x) {
}
vec2 noise2 (float x) {
- vec2 u;
- u.x = noise1 (x);
- u.y = noise1 (x + 19.34);
- return u;
+ return vec2 (
+ noise1 (x),
+ noise1 (x + 19.34)
+ );
}
vec2 noise2 (vec2 x) {
- vec2 u;
- u.x = noise1 (x);
- u.y = noise1 (x + vec2 (19.34, 7.66));
- return u;
+ return vec2 (
+ noise1 (x),
+ noise1 (x + vec2 (19.34, 7.66))
+ );
}
vec2 noise2 (vec3 x) {
- vec2 u;
- u.x = noise1 (x);
- u.y = noise1 (x + vec3 (19.34, 7.66, 3.23));
- return u;
+ return vec2 (
+ noise1 (x),
+ noise1 (x + vec3 (19.34, 7.66, 3.23))
+ );
}
vec2 noise2 (vec4 x) {
- vec2 u;
- u.x = noise1 (x);
- u.y = noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77));
- return u;
+ return vec2 (
+ noise1 (x),
+ noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77))
+ );
}
vec3 noise3 (float x) {
- vec3 u;
- u.x = noise1 (x);
- u.y = noise1 (x + 19.34);
- u.z = noise1 (x + 5.47);
- return u;
+ return vec3 (
+ noise1 (x),
+ noise1 (x + 19.34),
+ noise1 (x + 5.47)
+ );
}
vec3 noise3 (vec2 x) {
- vec3 u;
- u.x = noise1 (x);
- u.y = noise1 (x + vec2 (19.34, 7.66));
- u.z = noise1 (x + vec2 (5.47, 17.85));
- return u;
+ return vec3 (
+ noise1 (x),
+ noise1 (x + vec2 (19.34, 7.66)),
+ noise1 (x + vec2 (5.47, 17.85))
+ );
}
vec3 noise3 (vec3 x) {
- vec3 u;
- u.x = noise1 (x);
- u.y = noise1 (x + vec3 (19.34, 7.66, 3.23));
- u.z = noise1 (x + vec3 (5.47, 17.85, 11.04));
- return u;
+ return vec3 (
+ noise1 (x),
+ noise1 (x + vec3 (19.34, 7.66, 3.23)),
+ noise1 (x + vec3 (5.47, 17.85, 11.04))
+ );
}
vec3 noise3 (vec4 x) {
- vec3 u;
- u.x = noise1 (x);
- u.y = noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77));
- u.z = noise1 (x + vec4 (5.47, 17.85, 11.04, 13.19));
- return u;
+ return vec3 (
+ noise1 (x),
+ noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77)),
+ noise1 (x + vec4 (5.47, 17.85, 11.04, 13.19))
+ );
}
vec4 noise4 (float x) {
- vec4 u;
- u.x = noise1 (x);
- u.y = noise1 (x + 19.34);
- u.z = noise1 (x + 5.47);
- u.w = noise1 (x + 23.54);
- return u;
+ return vec4 (
+ noise1 (x),
+ noise1 (x + 19.34),
+ noise1 (x + 5.47),
+ noise1 (x + 23.54)
+ );
}
vec4 noise4 (vec2 x) {
- vec4 u;
- u.x = noise1 (x);
- u.y = noise1 (x + vec2 (19.34, 7.66));
- u.z = noise1 (x + vec2 (5.47, 17.85));
- u.w = noise1 (x + vec2 (23.54, 29.11));
- return u;
+ return vec4 (
+ noise1 (x),
+ noise1 (x + vec2 (19.34, 7.66)),
+ noise1 (x + vec2 (5.47, 17.85)),
+ noise1 (x + vec2 (23.54, 29.11))
+ );
}
vec4 noise4 (vec3 x) {
- vec4 u;
- u.x = noise1 (x);
- u.y = noise1 (x + vec3 (19.34, 7.66, 3.23));
- u.z = noise1 (x + vec3 (5.47, 17.85, 11.04));
- u.w = noise1 (x + vec3 (23.54, 29.11, 31.91));
- return u;
+ return vec4 (
+ noise1 (x),
+ noise1 (x + vec3 (19.34, 7.66, 3.23)),
+ noise1 (x + vec3 (5.47, 17.85, 11.04)),
+ noise1 (x + vec3 (23.54, 29.11, 31.91))
+ );
}
vec4 noise4 (vec4 x) {
- vec4 u;
- u.x = noise1 (x);
- u.y = noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77));
- u.z = noise1 (x + vec4 (5.47, 17.85, 11.04, 13.19));
- u.w = noise1 (x + vec4 (23.54, 29.11, 31.91, 37.48));
- return u;
+ return vec4 (
+ noise1 (x),
+ noise1 (x + vec4 (19.34, 7.66, 3.23, 2.77)),
+ noise1 (x + vec4 (5.47, 17.85, 11.04, 13.19)),
+ noise1 (x + vec4 (23.54, 29.11, 31.91, 37.48))
+ );
}
diff --git a/src/mesa/shader/slang/library/slang_common_builtin_gc.h b/src/mesa/shader/slang/library/slang_common_builtin_gc.h
index 0422790cdad..7198e5f9478 100644
--- a/src/mesa/shader/slang/library/slang_common_builtin_gc.h
+++ b/src/mesa/shader/slang/library/slang_common_builtin_gc.h
@@ -116,100 +116,81 @@
97,100,0,0,0,1,8,58,118,101,99,52,0,17,49,56,48,0,48,0,0,0,0,18,114,97,100,0,48,58,118,101,99,52,0,
17,51,0,49,52,49,53,57,51,0,0,0,0,49,0,0,1,0,9,0,115,105,110,0,1,0,0,9,97,110,103,108,101,0,0,0,1,
3,2,0,9,1,120,0,0,0,4,102,108,111,97,116,95,115,105,110,101,0,18,120,0,0,18,97,110,103,108,101,0,0,
-0,8,18,120,0,0,0,1,0,10,0,115,105,110,0,1,0,0,10,97,110,103,108,101,0,0,0,1,3,2,0,10,1,117,0,0,0,9,
-18,117,0,59,120,0,58,115,105,110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,
-58,115,105,110,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,115,105,110,0,1,
-0,0,11,97,110,103,108,101,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,105,110,0,18,97,
-110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,105,110,0,18,97,110,103,108,101,0,
-59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,105,110,0,18,97,110,103,108,101,0,59,122,0,0,0,20,0,8,
-18,117,0,0,0,1,0,12,0,115,105,110,0,1,0,0,12,97,110,103,108,101,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,
-117,0,59,120,0,58,115,105,110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,
-115,105,110,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,105,110,0,18,97,
-110,103,108,101,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,115,105,110,0,18,97,110,103,108,101,0,
-59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,99,111,115,0,1,0,0,9,97,110,103,108,101,0,0,0,1,8,58,115,
-105,110,0,18,97,110,103,108,101,0,17,49,0,53,55,48,56,0,0,46,0,0,0,0,1,0,10,0,99,111,115,0,1,0,0,
-10,97,110,103,108,101,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,99,111,115,0,18,97,110,
-103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,99,111,115,0,18,97,110,103,108,101,0,59,121,
-0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,99,111,115,0,1,0,0,11,97,110,103,108,101,0,0,0,1,3,2,0,11,1,117,
-0,0,0,9,18,117,0,59,120,0,58,99,111,115,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,
-121,0,58,99,111,115,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,99,111,115,
-0,18,97,110,103,108,101,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,99,111,115,0,1,0,0,12,97,110,
-103,108,101,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,99,111,115,0,18,97,110,103,108,101,
-0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,99,111,115,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,
-9,18,117,0,59,122,0,58,99,111,115,0,18,97,110,103,108,101,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,
-58,99,111,115,0,18,97,110,103,108,101,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,116,97,110,0,1,0,
-0,9,97,110,103,108,101,0,0,0,1,8,58,115,105,110,0,18,97,110,103,108,101,0,0,0,58,99,111,115,0,18,
-97,110,103,108,101,0,0,0,49,0,0,1,0,10,0,116,97,110,0,1,0,0,10,97,110,103,108,101,0,0,0,1,3,2,0,10,
-1,117,0,0,0,9,18,117,0,59,120,0,58,116,97,110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,
-0,59,121,0,58,116,97,110,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,116,
-97,110,0,1,0,0,11,97,110,103,108,101,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,116,97,
-110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,116,97,110,0,18,97,110,103,
-108,101,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,116,97,110,0,18,97,110,103,108,101,0,59,122,0,0,
-0,20,0,8,18,117,0,0,0,1,0,12,0,116,97,110,0,1,0,0,12,97,110,103,108,101,0,0,0,1,3,2,0,12,1,117,0,0,
-0,9,18,117,0,59,120,0,58,116,97,110,0,18,97,110,103,108,101,0,59,120,0,0,0,20,0,9,18,117,0,59,121,
-0,58,116,97,110,0,18,97,110,103,108,101,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,116,97,110,0,18,
-97,110,103,108,101,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,116,97,110,0,18,97,110,103,108,101,0,
-59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,97,115,105,110,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,
-4,102,108,111,97,116,95,97,114,99,115,105,110,101,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,
-0,97,115,105,110,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,97,115,105,110,
-0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,115,105,110,0,18,118,0,59,121,0,0,0,20,0,8,
-18,117,0,0,0,1,0,11,0,97,115,105,110,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,
-0,58,97,115,105,110,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,115,105,110,0,18,118,0,
-59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,97,115,105,110,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,
-0,1,0,12,0,97,115,105,110,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,97,
-115,105,110,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,115,105,110,0,18,118,0,59,121,0,
-0,0,20,0,9,18,117,0,59,122,0,58,97,115,105,110,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,
-97,115,105,110,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,97,99,111,115,0,1,0,0,9,120,0,0,
-0,1,8,17,49,0,53,55,48,56,0,0,58,97,115,105,110,0,18,120,0,0,0,47,0,0,1,0,10,0,97,99,111,115,0,1,0,
-0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,97,99,111,115,0,18,118,0,59,120,0,0,0,
-20,0,9,18,117,0,59,121,0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,97,
-99,111,115,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,97,99,111,115,0,18,
-118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,20,0,9,18,117,
-0,59,122,0,58,97,99,111,115,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,97,99,111,115,0,1,
-0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,97,99,111,115,0,18,118,0,59,120,0,0,
-0,20,0,9,18,117,0,59,121,0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,97,
-99,111,115,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,97,99,111,115,0,18,118,0,59,119,0,0,
-0,20,0,8,18,117,0,0,0,1,0,9,0,97,116,97,110,0,1,0,0,9,121,95,111,118,101,114,95,120,0,0,0,1,3,2,0,
-9,1,122,0,0,0,4,102,108,111,97,116,95,97,114,99,116,97,110,0,18,122,0,0,18,121,95,111,118,101,114,
-95,120,0,0,0,8,18,122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,121,95,111,118,101,114,95,120,0,0,0,
-1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,
-59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,121,
-0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,97,116,97,110,0,1,0,0,11,121,95,111,118,101,114,95,120,0,0,0,1,
-3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,
-120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,121,0,
-0,0,20,0,9,18,117,0,59,122,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,122,0,0,0,20,
-0,8,18,117,0,0,0,1,0,12,0,97,116,97,110,0,1,0,0,12,121,95,111,118,101,114,95,120,0,0,0,1,3,2,0,12,
-1,117,0,0,0,9,18,117,0,59,120,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,120,0,0,0,
-20,0,9,18,117,0,59,121,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,121,0,0,0,20,0,9,
-18,117,0,59,122,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,122,0,0,0,20,0,9,18,117,
-0,59,119,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,119,0,0,0,20,0,8,18,117,0,0,0,
-1,0,9,0,97,116,97,110,0,1,0,0,9,121,0,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,122,0,0,0,9,18,122,0,58,97,
-116,97,110,0,18,121,0,18,120,0,49,0,0,20,0,10,18,120,0,17,48,0,48,0,0,40,0,2,10,18,121,0,17,48,0,
-48,0,0,40,0,8,18,122,0,17,51,0,49,52,49,53,57,51,0,0,47,0,9,14,0,8,18,122,0,17,51,0,49,52,49,53,57,
-51,0,0,46,0,0,9,14,0,8,18,122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,117,0,0,1,0,0,10,118,0,0,0,1,
-3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,
-0,0,20,0,9,18,116,0,59,121,0,58,97,116,97,110,0,18,117,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,8,
-18,116,0,0,0,1,0,11,0,97,116,97,110,0,1,0,0,11,117,0,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,116,0,0,0,9,
-18,116,0,59,120,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,116,0,59,
-121,0,58,97,116,97,110,0,18,117,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,97,
-116,97,110,0,18,117,0,59,122,0,0,18,118,0,59,122,0,0,0,20,0,8,18,116,0,0,0,1,0,12,0,97,116,97,110,
-0,1,0,0,12,117,0,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,58,97,116,97,110,
-0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,97,116,97,110,0,18,117,0,
-59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,97,116,97,110,0,18,117,0,59,122,0,0,
-18,118,0,59,122,0,0,0,20,0,9,18,116,0,59,119,0,58,97,116,97,110,0,18,117,0,59,119,0,0,18,118,0,59,
-119,0,0,0,20,0,8,18,116,0,0,0,1,0,9,0,112,111,119,0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,3,2,0,9,1,
-112,0,0,0,4,102,108,111,97,116,95,112,111,119,101,114,0,18,112,0,0,18,120,0,0,18,121,0,0,0,8,18,
-112,0,0,0,1,0,10,0,112,111,119,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,
-116,0,59,120,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,
-58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,8,18,116,0,0,0,1,0,11,0,112,111,
-119,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,58,112,111,
-119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,112,111,119,0,18,118,0,
-59,121,0,0,18,117,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,112,111,119,0,18,118,0,59,122,0,0,18,
-117,0,59,122,0,0,0,20,0,8,18,116,0,0,0,1,0,12,0,112,111,119,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,
-1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,
-0,0,20,0,9,18,116,0,59,121,0,58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,9,18,
-116,0,59,122,0,58,112,111,119,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,9,18,116,0,59,119,0,
-58,112,111,119,0,18,118,0,59,119,0,0,18,117,0,59,119,0,0,0,20,0,8,18,116,0,0,0,1,0,9,0,101,120,112,
+0,8,18,120,0,0,0,1,0,10,0,115,105,110,0,1,0,0,10,97,110,103,108,101,0,0,0,1,8,58,118,101,99,50,0,
+58,115,105,110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,
+59,121,0,0,0,0,0,0,0,1,0,11,0,115,105,110,0,1,0,0,11,97,110,103,108,101,0,0,0,1,8,58,118,101,99,51,
+0,58,115,105,110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,
+59,121,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,59,122,0,0,0,0,0,0,0,1,0,12,0,115,105,110,
+0,1,0,0,12,97,110,103,108,101,0,0,0,1,8,58,118,101,99,52,0,58,115,105,110,0,18,97,110,103,108,101,
+0,59,120,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,59,121,0,0,0,0,58,115,105,110,0,18,97,
+110,103,108,101,0,59,122,0,0,0,0,58,115,105,110,0,18,97,110,103,108,101,0,59,119,0,0,0,0,0,0,0,1,0,
+9,0,99,111,115,0,1,0,0,9,97,110,103,108,101,0,0,0,1,8,58,115,105,110,0,18,97,110,103,108,101,0,17,
+49,0,53,55,48,56,0,0,46,0,0,0,0,1,0,10,0,99,111,115,0,1,0,0,10,97,110,103,108,101,0,0,0,1,8,58,118,
+101,99,50,0,58,99,111,115,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,
+108,101,0,59,121,0,0,0,0,0,0,0,1,0,11,0,99,111,115,0,1,0,0,11,97,110,103,108,101,0,0,0,1,8,58,118,
+101,99,50,0,58,99,111,115,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,
+108,101,0,59,121,0,0,0,0,58,99,111,115,0,18,97,110,103,108,101,0,59,122,0,0,0,0,0,0,0,1,0,12,0,99,
+111,115,0,1,0,0,12,97,110,103,108,101,0,0,0,1,8,58,118,101,99,52,0,58,99,111,115,0,18,97,110,103,
+108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,108,101,0,59,121,0,0,0,0,58,99,111,115,0,18,
+97,110,103,108,101,0,59,122,0,0,0,0,58,99,111,115,0,18,97,110,103,108,101,0,59,119,0,0,0,0,0,0,0,1,
+0,9,0,116,97,110,0,1,0,0,9,97,110,103,108,101,0,0,0,1,8,58,115,105,110,0,18,97,110,103,108,101,0,0,
+0,58,99,111,115,0,18,97,110,103,108,101,0,0,0,49,0,0,1,0,10,0,116,97,110,0,1,0,0,10,97,110,103,108,
+101,0,0,0,1,8,58,118,101,99,50,0,58,116,97,110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,116,97,
+110,0,18,97,110,103,108,101,0,59,121,0,0,0,0,0,0,0,1,0,11,0,116,97,110,0,1,0,0,11,97,110,103,108,
+101,0,0,0,1,8,58,118,101,99,51,0,58,116,97,110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,116,97,
+110,0,18,97,110,103,108,101,0,59,121,0,0,0,0,58,116,97,110,0,18,97,110,103,108,101,0,59,122,0,0,0,
+0,0,0,0,1,0,12,0,116,97,110,0,1,0,0,12,97,110,103,108,101,0,0,0,1,8,58,118,101,99,52,0,58,116,97,
+110,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,116,97,110,0,18,97,110,103,108,101,0,59,121,0,0,0,
+0,58,116,97,110,0,18,97,110,103,108,101,0,59,122,0,0,0,0,58,116,97,110,0,18,97,110,103,108,101,0,
+59,119,0,0,0,0,0,0,0,1,0,9,0,97,115,105,110,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,102,108,
+111,97,116,95,97,114,99,115,105,110,101,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,97,115,
+105,110,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,97,115,105,110,0,18,118,0,59,120,0,0,0,0,58,
+97,115,105,110,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,97,115,105,110,0,1,0,0,11,118,0,0,0,1,8,58,
+118,101,99,51,0,58,97,115,105,110,0,18,118,0,59,120,0,0,0,0,58,97,115,105,110,0,18,118,0,59,121,0,
+0,0,0,58,97,115,105,110,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,97,115,105,110,0,1,0,0,12,118,0,0,
+0,1,8,58,118,101,99,52,0,58,97,115,105,110,0,18,118,0,59,120,0,0,0,0,58,97,115,105,110,0,18,118,0,
+59,121,0,0,0,0,58,97,115,105,110,0,18,118,0,59,122,0,0,0,0,58,97,115,105,110,0,18,118,0,59,119,0,0,
+0,0,0,0,0,1,0,9,0,97,99,111,115,0,1,0,0,9,120,0,0,0,1,8,17,49,0,53,55,48,56,0,0,58,97,115,105,110,
+0,18,120,0,0,0,47,0,0,1,0,10,0,97,99,111,115,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,97,99,
+111,115,0,18,118,0,59,120,0,0,0,0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,97,99,
+111,115,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,97,99,111,115,0,18,118,0,59,120,0,0,0,0,58,
+97,99,111,115,0,18,118,0,59,121,0,0,0,0,58,97,99,111,115,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,
+97,99,111,115,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,97,99,111,115,0,18,118,0,59,120,0,0,0,
+0,58,97,99,111,115,0,18,118,0,59,121,0,0,0,0,58,97,99,111,115,0,18,118,0,59,122,0,0,0,0,58,97,99,
+111,115,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,97,116,97,110,0,1,0,0,9,121,95,111,118,101,114,95,
+120,0,0,0,1,3,2,0,9,1,122,0,0,0,4,102,108,111,97,116,95,97,114,99,116,97,110,0,18,122,0,0,18,121,
+95,111,118,101,114,95,120,0,0,0,8,18,122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,121,95,111,118,
+101,114,95,120,0,0,0,1,8,58,118,101,99,50,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,
+59,120,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,121,0,0,0,0,0,0,0,1,0,11,0,
+97,116,97,110,0,1,0,0,11,121,95,111,118,101,114,95,120,0,0,0,1,8,58,118,101,99,51,0,58,97,116,97,
+110,0,18,121,95,111,118,101,114,95,120,0,59,120,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,
+114,95,120,0,59,121,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,122,0,0,0,0,0,
+0,0,1,0,12,0,97,116,97,110,0,1,0,0,12,121,95,111,118,101,114,95,120,0,0,0,1,8,58,118,101,99,52,0,
+58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,120,0,0,0,0,58,97,116,97,110,0,18,121,95,
+111,118,101,114,95,120,0,59,121,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,
+122,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,119,0,0,0,0,0,0,0,1,0,9,0,97,
+116,97,110,0,1,0,0,9,121,0,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,122,0,0,0,9,18,122,0,58,97,116,97,110,0,
+18,121,0,18,120,0,49,0,0,20,0,10,18,120,0,17,48,0,48,0,0,40,0,2,10,18,121,0,17,48,0,48,0,0,40,0,8,
+18,122,0,17,51,0,49,52,49,53,57,51,0,0,47,0,9,14,0,8,18,122,0,17,51,0,49,52,49,53,57,51,0,0,46,0,0,
+9,14,0,8,18,122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,117,0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,
+99,50,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,116,97,110,0,18,117,0,
+59,121,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,97,116,97,110,0,1,0,0,11,117,0,0,1,0,0,11,118,0,
+0,0,1,8,58,118,101,99,51,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,
+116,97,110,0,18,117,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,97,116,97,110,0,18,117,0,59,122,0,0,18,
+118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,97,116,97,110,0,1,0,0,12,117,0,0,1,0,0,12,118,0,0,0,1,8,58,118,
+101,99,52,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,116,97,110,0,18,
+117,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,97,116,97,110,0,18,117,0,59,122,0,0,18,118,0,59,122,0,
+0,0,0,58,97,116,97,110,0,18,117,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,112,111,119,0,1,
+0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,3,2,0,9,1,112,0,0,0,4,102,108,111,97,116,95,112,111,119,101,114,
+0,18,112,0,0,18,120,0,0,18,121,0,0,0,8,18,112,0,0,0,1,0,10,0,112,111,119,0,1,0,0,10,118,0,0,1,0,0,
+10,117,0,0,0,1,8,58,118,101,99,50,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,
+58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,0,0,0,1,0,11,0,112,111,119,0,1,0,0,11,
+118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,101,99,51,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,
+120,0,0,0,0,58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,112,111,119,0,18,118,0,
+59,122,0,0,18,117,0,59,122,0,0,0,0,0,0,0,1,0,12,0,112,111,119,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,
+0,1,8,58,118,101,99,52,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,112,111,
+119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,112,111,119,0,18,118,0,59,122,0,0,18,117,0,59,
+122,0,0,0,0,58,112,111,119,0,18,118,0,59,119,0,0,18,117,0,59,119,0,0,0,0,0,0,0,1,0,9,0,101,120,112,
0,1,0,0,9,120,0,0,0,1,8,58,112,111,119,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,18,120,0,0,0,0,0,1,
0,10,0,101,120,112,0,1,0,0,10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,17,50,0,55,49,56,
50,56,49,56,51,0,0,0,0,0,18,118,0,0,0,0,0,1,0,11,0,101,120,112,0,1,0,0,11,118,0,0,0,1,8,58,112,111,
@@ -217,164 +198,145 @@
120,112,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,52,0,17,50,0,55,49,56,50,56,49,56,
51,0,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,108,111,103,50,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,
102,108,111,97,116,95,108,111,103,50,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,108,111,103,
-50,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,108,111,103,50,0,18,118,0,59,
-120,0,0,0,20,0,9,18,117,0,59,121,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,
-0,11,0,108,111,103,50,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,108,111,
-103,50,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,
-20,0,9,18,117,0,59,122,0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,
-108,111,103,50,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,108,111,103,50,0,
-18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,20,0,9,18,
-117,0,59,122,0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,108,111,103,
-50,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,108,111,103,0,1,0,0,9,120,0,0,0,1,8,58,108,
-111,103,50,0,18,120,0,0,0,58,108,111,103,50,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,49,0,0,1,0,
-10,0,108,111,103,0,1,0,0,10,118,0,0,0,1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,
-118,101,99,50,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,0,1,0,11,0,108,111,103,0,1,0,0,11,
-118,0,0,0,1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,118,101,99,51,0,17,50,0,55,
-49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,0,1,0,12,0,108,111,103,0,1,0,0,12,118,0,0,0,1,8,58,108,111,
-103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,118,101,99,52,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,
-0,0,0,49,0,0,1,0,9,0,101,120,112,50,0,1,0,0,9,120,0,0,0,1,8,58,112,111,119,0,17,50,0,48,0,0,0,18,
-120,0,0,0,0,0,1,0,10,0,101,120,112,50,0,1,0,0,10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,
-17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,11,0,101,120,112,50,0,1,0,0,11,118,0,0,0,1,8,58,112,111,
-119,0,58,118,101,99,51,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,12,0,101,120,112,50,0,1,0,0,12,
-118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,52,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,
-115,113,114,116,0,1,0,0,9,120,0,0,0,1,8,58,112,111,119,0,18,120,0,0,17,48,0,53,0,0,0,0,0,0,1,0,10,
-0,115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,50,0,17,48,0,
-53,0,0,0,0,0,0,0,0,1,0,11,0,115,113,114,116,0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,
-58,118,101,99,51,0,17,48,0,53,0,0,0,0,0,0,0,0,1,0,12,0,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,
-112,111,119,0,18,118,0,0,58,118,101,99,52,0,17,48,0,53,0,0,0,0,0,0,0,0,1,0,9,0,105,110,118,101,114,
-115,101,115,113,114,116,0,1,0,0,9,120,0,0,0,1,8,17,49,0,48,0,0,58,115,113,114,116,0,18,120,0,0,0,
-49,0,0,1,0,10,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,
-50,0,17,49,0,48,0,0,0,0,58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,11,0,105,110,118,101,114,115,
-101,115,113,114,116,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,17,49,0,48,0,0,0,0,58,115,113,114,
-116,0,18,118,0,0,0,49,0,0,1,0,12,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,12,118,0,0,
-0,1,8,58,118,101,99,52,0,17,49,0,48,0,0,0,0,58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,9,0,97,98,
-115,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,0,48,0,0,43,18,120,0,18,120,0,54,31,0,0,1,0,10,0,97,98,
-115,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,97,98,115,0,18,118,0,59,120,
-0,0,0,20,0,9,18,117,0,59,121,0,58,97,98,115,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,
-97,98,115,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,97,98,115,0,18,118,0,
-59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,97,98,115,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,
-0,58,97,98,115,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,97,98,115,0,1,0,0,12,118,0,0,0,
-1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,97,98,115,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,
-121,0,58,97,98,115,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,97,98,115,0,18,118,0,59,122,
-0,0,0,20,0,9,18,117,0,59,119,0,58,97,98,115,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,
-115,105,103,110,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,0,48,0,0,41,17,49,0,48,0,0,18,120,0,17,48,0,
-48,0,0,40,17,49,0,48,0,0,54,17,48,0,48,0,0,31,31,0,0,1,0,10,0,115,105,103,110,0,1,0,0,10,118,0,0,0,
-1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,115,105,103,110,0,18,118,0,59,120,0,0,0,20,0,9,18,
-117,0,59,121,0,58,115,105,103,110,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,115,105,103,
-110,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,105,103,110,0,18,118,0,
-59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,105,103,110,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,
-59,122,0,58,115,105,103,110,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,115,105,103,110,0,
-1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,115,105,103,110,0,18,118,0,59,120,
-0,0,0,20,0,9,18,117,0,59,121,0,58,115,105,103,110,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,
-58,115,105,103,110,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,115,105,103,110,0,18,118,0,
-59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,102,108,111,111,114,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,
-0,0,4,102,108,111,97,116,95,102,108,111,111,114,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,
-102,108,111,111,114,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,102,108,111,
-111,114,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,102,108,111,111,114,0,18,118,0,59,121,
-0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,102,108,111,111,114,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,
-9,18,117,0,59,120,0,58,102,108,111,111,114,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,102,
-108,111,111,114,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,102,108,111,111,114,0,18,118,0,
-59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,102,108,111,111,114,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,
-117,0,0,0,9,18,117,0,59,120,0,58,102,108,111,111,114,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,
-121,0,58,102,108,111,111,114,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,102,108,111,111,
-114,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,102,108,111,111,114,0,18,118,0,59,119,0,0,
-0,20,0,8,18,117,0,0,0,1,0,9,0,99,101,105,108,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,102,108,
-111,97,116,95,99,101,105,108,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,99,101,105,108,0,1,
-0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,99,101,105,108,0,18,118,0,59,120,0,
-0,0,20,0,9,18,117,0,59,121,0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,
-0,99,101,105,108,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,99,101,105,108,
-0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,20,0,9,
-18,117,0,59,122,0,58,99,101,105,108,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,99,101,
-105,108,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,99,101,105,108,0,18,118,
-0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,
-59,122,0,58,99,101,105,108,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,99,101,105,108,0,18,
-118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,102,114,97,99,116,0,1,0,0,9,120,0,0,0,1,8,18,120,0,
-58,102,108,111,111,114,0,18,120,0,0,0,47,0,0,1,0,10,0,102,114,97,99,116,0,1,0,0,10,118,0,0,0,1,8,
-18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,11,0,102,114,97,99,116,0,1,0,0,11,118,0,
-0,0,1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,12,0,102,114,97,99,116,0,1,0,0,
-12,118,0,0,0,1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,9,0,109,111,100,0,1,0,0,
-9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,58,102,108,111,111,114,0,18,120,0,18,121,0,49,0,
-0,48,47,0,0,1,0,10,0,109,111,100,0,1,0,0,10,118,0,0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,
-108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,11,0,109,111,100,0,1,0,0,11,118,0,0,1,0,0,
-9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,
-12,0,109,111,100,0,1,0,0,12,118,0,0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,
-0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,10,0,109,111,100,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,
-8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,11,0,109,111,
-100,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,
-18,117,0,49,0,0,48,47,0,0,1,0,12,0,109,111,100,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,18,118,0,
-18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,9,0,109,105,110,0,1,0,0,9,
-120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,40,18,120,0,18,121,0,31,0,0,1,0,10,0,109,105,110,0,
-1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,58,109,105,110,0,18,
-118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,105,110,0,18,118,0,59,121,0,
-0,18,117,0,59,121,0,0,0,20,0,8,18,116,0,0,0,1,0,11,0,109,105,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,
-0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,58,109,105,110,0,18,118,0,59,120,0,0,18,117,0,59,
-120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,
-9,18,116,0,59,122,0,58,109,105,110,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,8,18,116,0,0,0,
-1,0,12,0,109,105,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,
-120,0,58,109,105,110,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,
-105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,109,105,110,0,18,
-118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,9,18,116,0,59,119,0,58,109,105,110,0,18,118,0,59,119,0,
-0,18,117,0,59,119,0,0,0,20,0,8,18,116,0,0,0,1,0,10,0,109,105,110,0,1,0,0,10,118,0,0,1,0,0,9,121,0,
-0,0,1,8,58,109,105,110,0,18,118,0,0,58,118,101,99,50,0,18,121,0,0,0,0,0,0,0,1,0,11,0,109,105,110,0,
-1,0,0,11,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,105,110,0,18,118,0,0,58,118,101,99,51,0,18,121,0,0,0,
-0,0,0,0,1,0,12,0,109,105,110,0,1,0,0,12,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,105,110,0,18,118,0,0,
-58,118,101,99,52,0,18,121,0,0,0,0,0,0,0,1,0,9,0,109,97,120,0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,
-18,120,0,18,121,0,40,18,121,0,18,120,0,31,0,0,1,0,10,0,109,97,120,0,1,0,0,10,118,0,0,1,0,0,10,117,
-0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,58,109,97,120,0,18,118,0,59,120,0,0,18,117,0,59,
-120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,97,120,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,
-8,18,116,0,0,0,1,0,11,0,109,97,120,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,
-18,116,0,59,120,0,58,109,97,120,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,
-0,58,109,97,120,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,20,0,9,18,116,0,59,122,0,58,109,97,120,
-0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,8,18,116,0,0,0,1,0,12,0,109,97,120,0,1,0,0,12,118,
-0,0,1,0,0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,58,109,97,120,0,18,118,0,59,120,
-0,0,18,117,0,59,120,0,0,0,20,0,9,18,116,0,59,121,0,58,109,97,120,0,18,118,0,59,121,0,0,18,117,0,59,
-121,0,0,0,20,0,9,18,116,0,59,122,0,58,109,97,120,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,20,0,
-9,18,116,0,59,119,0,58,109,97,120,0,18,118,0,59,119,0,0,18,117,0,59,119,0,0,0,20,0,8,18,116,0,0,0,
-1,0,10,0,109,97,120,0,1,0,0,10,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,97,120,0,18,118,0,0,58,118,101,
-99,50,0,18,121,0,0,0,0,0,0,0,1,0,11,0,109,97,120,0,1,0,0,11,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,
-97,120,0,18,118,0,0,58,118,101,99,51,0,18,121,0,0,0,0,0,0,0,1,0,12,0,109,97,120,0,1,0,0,12,118,0,0,
-1,0,0,9,121,0,0,0,1,8,58,109,97,120,0,18,118,0,0,58,118,101,99,52,0,18,121,0,0,0,0,0,0,0,1,0,9,0,
-99,108,97,109,112,0,1,0,0,9,120,0,0,1,0,0,9,109,105,110,86,97,108,0,0,1,0,0,9,109,97,120,86,97,108,
-0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,109,97,
-120,86,97,108,0,0,0,0,0,1,0,10,0,99,108,97,109,112,0,1,0,0,10,120,0,0,1,0,0,9,109,105,110,86,97,
+50,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,
+111,103,50,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,108,111,103,50,0,1,0,0,11,118,0,0,0,1,8,58,118,
+101,99,51,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,
+0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,108,111,103,50,0,1,0,0,12,118,0,0,0,1,
+8,58,118,101,99,52,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,111,103,50,0,18,118,0,59,
+121,0,0,0,0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,0,58,108,111,103,50,0,18,118,0,59,119,0,0,0,
+0,0,0,0,1,0,9,0,108,111,103,0,1,0,0,9,120,0,0,0,1,8,58,108,111,103,50,0,18,120,0,0,0,58,108,111,
+103,50,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,49,0,0,1,0,10,0,108,111,103,0,1,0,0,10,118,0,0,0,
+1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,118,101,99,50,0,17,50,0,55,49,56,50,56,
+49,56,51,0,0,0,0,0,0,49,0,0,1,0,11,0,108,111,103,0,1,0,0,11,118,0,0,0,1,8,58,108,111,103,50,0,18,
+118,0,0,0,58,108,111,103,50,0,58,118,101,99,51,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,
+0,1,0,12,0,108,111,103,0,1,0,0,12,118,0,0,0,1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,
+0,58,118,101,99,52,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,0,1,0,9,0,101,120,112,50,0,1,
+0,0,9,120,0,0,0,1,8,58,112,111,119,0,17,50,0,48,0,0,0,18,120,0,0,0,0,0,1,0,10,0,101,120,112,50,0,1,
+0,0,10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,
+11,0,101,120,112,50,0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,51,0,17,50,0,48,0,0,0,
+0,0,18,118,0,0,0,0,0,1,0,12,0,101,120,112,50,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,58,118,101,
+99,52,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,115,113,114,116,0,1,0,0,9,120,0,0,0,1,8,58,
+112,111,119,0,18,120,0,0,17,48,0,53,0,0,0,0,0,0,1,0,10,0,115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,
+58,112,111,119,0,18,118,0,0,58,118,101,99,50,0,17,48,0,53,0,0,0,0,0,0,0,0,1,0,11,0,115,113,114,116,
+0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,51,0,17,48,0,53,0,0,0,0,0,0,0,0,
+1,0,12,0,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,52,0,
+17,48,0,53,0,0,0,0,0,0,0,0,1,0,9,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,9,120,0,0,0,
+1,8,17,49,0,48,0,0,58,115,113,114,116,0,18,120,0,0,0,49,0,0,1,0,10,0,105,110,118,101,114,115,101,
+115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,17,49,0,48,0,0,0,0,58,115,113,114,116,
+0,18,118,0,0,0,49,0,0,1,0,11,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,11,118,0,0,0,1,
+8,58,118,101,99,51,0,17,49,0,48,0,0,0,0,58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,12,0,105,110,
+118,101,114,115,101,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,17,49,0,48,0,0,0,0,
+58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,9,0,97,98,115,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,
+0,48,0,0,43,18,120,0,18,120,0,54,31,0,0,1,0,10,0,97,98,115,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,
+50,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,98,115,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,
+97,98,115,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,
+98,115,0,18,118,0,59,121,0,0,0,0,58,97,98,115,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,97,98,115,0,
+1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,98,115,0,18,
+118,0,59,121,0,0,0,0,58,97,98,115,0,18,118,0,59,122,0,0,0,0,58,97,98,115,0,18,118,0,59,119,0,0,0,0,
+0,0,0,1,0,9,0,115,105,103,110,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,0,48,0,0,41,17,49,0,48,0,0,18,
+120,0,17,48,0,48,0,0,40,17,49,0,48,0,0,54,17,48,0,48,0,0,31,31,0,0,1,0,10,0,115,105,103,110,0,1,0,
+0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,115,105,103,110,0,18,118,0,59,120,0,0,0,0,58,115,105,103,
+110,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,105,103,110,0,1,0,0,11,118,0,0,0,1,8,58,118,101,
+99,51,0,58,115,105,103,110,0,18,118,0,59,120,0,0,0,0,58,115,105,103,110,0,18,118,0,59,121,0,0,0,0,
+58,115,105,103,110,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,115,105,103,110,0,1,0,0,12,118,0,0,0,1,
+8,58,118,101,99,52,0,58,115,105,103,110,0,18,118,0,59,120,0,0,0,0,58,115,105,103,110,0,18,118,0,59,
+121,0,0,0,0,58,115,105,103,110,0,18,118,0,59,122,0,0,0,0,58,115,105,103,110,0,18,118,0,59,119,0,0,
+0,0,0,0,0,1,0,9,0,102,108,111,111,114,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,102,108,111,97,
+116,95,102,108,111,111,114,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,102,108,111,111,114,0,
+1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,102,108,111,111,114,0,18,118,0,59,120,0,0,0,0,58,102,
+108,111,111,114,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,102,108,111,111,114,0,1,0,0,11,118,0,0,0,
+1,8,58,118,101,99,51,0,58,102,108,111,111,114,0,18,118,0,59,120,0,0,0,0,58,102,108,111,111,114,0,
+18,118,0,59,121,0,0,0,0,58,102,108,111,111,114,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,102,108,
+111,111,114,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,102,108,111,111,114,0,18,118,0,59,120,0,
+0,0,0,58,102,108,111,111,114,0,18,118,0,59,121,0,0,0,0,58,102,108,111,111,114,0,18,118,0,59,122,0,
+0,0,0,58,102,108,111,111,114,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,99,101,105,108,0,1,0,0,9,120,
+0,0,0,1,3,2,0,9,1,121,0,0,0,4,102,108,111,97,116,95,99,101,105,108,0,18,121,0,0,18,120,0,0,0,8,18,
+121,0,0,0,1,0,10,0,99,101,105,108,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,99,101,105,108,0,
+18,118,0,59,120,0,0,0,0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,99,101,105,108,
+0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,99,101,105,108,0,18,118,0,59,120,0,0,0,0,58,99,101,
+105,108,0,18,118,0,59,121,0,0,0,0,58,99,101,105,108,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,99,
+101,105,108,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,99,101,105,108,0,18,118,0,59,120,0,0,0,
+0,58,99,101,105,108,0,18,118,0,59,121,0,0,0,0,58,99,101,105,108,0,18,118,0,59,122,0,0,0,0,58,99,
+101,105,108,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,102,114,97,99,116,0,1,0,0,9,120,0,0,0,1,8,18,
+120,0,58,102,108,111,111,114,0,18,120,0,0,0,47,0,0,1,0,10,0,102,114,97,99,116,0,1,0,0,10,118,0,0,0,
+1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,11,0,102,114,97,99,116,0,1,0,0,11,
+118,0,0,0,1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,12,0,102,114,97,99,116,0,1,
+0,0,12,118,0,0,0,1,8,18,118,0,58,102,108,111,111,114,0,18,118,0,0,0,47,0,0,1,0,9,0,109,111,100,0,1,
+0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,58,102,108,111,111,114,0,18,120,0,18,121,0,
+49,0,0,48,47,0,0,1,0,10,0,109,111,100,0,1,0,0,10,118,0,0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,
+58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,11,0,109,111,100,0,1,0,0,11,118,0,
+0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,
+0,0,1,0,12,0,109,111,100,0,1,0,0,12,118,0,0,1,0,0,9,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,
+111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,10,0,109,111,100,0,1,0,0,10,118,0,0,1,0,0,10,117,
+0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,11,0,
+109,111,100,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,18,117,0,58,102,108,111,111,114,0,
+18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,12,0,109,111,100,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,
+18,118,0,18,117,0,58,102,108,111,111,114,0,18,118,0,18,117,0,49,0,0,48,47,0,0,1,0,9,0,109,105,110,
+0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,40,18,120,0,18,121,0,31,0,0,1,0,10,0,109,
+105,110,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,118,101,99,50,0,58,109,105,110,0,18,118,0,59,
+120,0,0,18,117,0,59,120,0,0,0,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,0,0,0,
+1,0,11,0,109,105,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,101,99,50,0,58,109,105,110,0,
+18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,
+0,0,0,58,109,105,110,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,0,0,0,0,1,0,12,0,109,105,110,0,1,
+0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,118,101,99,52,0,58,109,105,110,0,18,118,0,59,120,0,0,18,
+117,0,59,120,0,0,0,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,109,105,110,0,
+18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,0,58,109,105,110,0,18,118,0,59,119,0,0,18,117,0,59,119,0,
+0,0,0,0,0,0,1,0,10,0,109,105,110,0,1,0,0,10,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,105,110,0,18,118,
+0,0,58,118,101,99,50,0,18,121,0,0,0,0,0,0,0,1,0,11,0,109,105,110,0,1,0,0,11,118,0,0,1,0,0,9,121,0,
+0,0,1,8,58,109,105,110,0,18,118,0,0,58,118,101,99,51,0,18,121,0,0,0,0,0,0,0,1,0,12,0,109,105,110,0,
+1,0,0,12,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,105,110,0,18,118,0,0,58,118,101,99,52,0,18,121,0,0,0,
+0,0,0,0,1,0,9,0,109,97,120,0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,40,18,121,0,
+18,120,0,31,0,0,1,0,10,0,109,97,120,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,118,101,99,50,0,
+58,109,97,120,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,109,97,120,0,18,118,0,59,121,0,0,18,
+117,0,59,121,0,0,0,0,0,0,0,1,0,11,0,109,97,120,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,
+101,99,51,0,58,109,97,120,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,109,97,120,0,18,118,0,
+59,121,0,0,18,117,0,59,121,0,0,0,0,58,109,97,120,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,0,0,0,
+0,1,0,12,0,109,97,120,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,118,101,99,52,0,58,109,97,120,0,
+18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,109,97,120,0,18,118,0,59,121,0,0,18,117,0,59,121,0,
+0,0,0,58,109,97,120,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,0,58,109,97,120,0,18,118,0,59,119,
+0,0,18,117,0,59,119,0,0,0,0,0,0,0,1,0,10,0,109,97,120,0,1,0,0,10,118,0,0,1,0,0,9,121,0,0,0,1,8,58,
+109,97,120,0,18,118,0,0,58,118,101,99,50,0,18,121,0,0,0,0,0,0,0,1,0,11,0,109,97,120,0,1,0,0,11,118,
+0,0,1,0,0,9,121,0,0,0,1,8,58,109,97,120,0,18,118,0,0,58,118,101,99,51,0,18,121,0,0,0,0,0,0,0,1,0,
+12,0,109,97,120,0,1,0,0,12,118,0,0,1,0,0,9,121,0,0,0,1,8,58,109,97,120,0,18,118,0,0,58,118,101,99,
+52,0,18,121,0,0,0,0,0,0,0,1,0,9,0,99,108,97,109,112,0,1,0,0,9,120,0,0,1,0,0,9,109,105,110,86,97,
108,0,0,1,0,0,9,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,18,109,
-105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,11,0,99,108,97,109,112,0,1,0,0,11,
+105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,10,0,99,108,97,109,112,0,1,0,0,10,
120,0,0,1,0,0,9,109,105,110,86,97,108,0,0,1,0,0,9,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,
58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,
-12,0,99,108,97,109,112,0,1,0,0,12,120,0,0,1,0,0,9,109,105,110,86,97,108,0,0,1,0,0,9,109,97,120,86,
+11,0,99,108,97,109,112,0,1,0,0,11,120,0,0,1,0,0,9,109,105,110,86,97,108,0,0,1,0,0,9,109,97,120,86,
97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,
-109,97,120,86,97,108,0,0,0,0,0,1,0,10,0,99,108,97,109,112,0,1,0,0,10,120,0,0,1,0,0,10,109,105,110,
-86,97,108,0,0,1,0,0,10,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,
-18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,11,0,99,108,97,109,112,0,1,
-0,0,11,120,0,0,1,0,0,11,109,105,110,86,97,108,0,0,1,0,0,11,109,97,120,86,97,108,0,0,0,1,8,58,109,
+109,97,120,86,97,108,0,0,0,0,0,1,0,12,0,99,108,97,109,112,0,1,0,0,12,120,0,0,1,0,0,9,109,105,110,
+86,97,108,0,0,1,0,0,9,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,
+18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,10,0,99,108,97,109,112,0,1,
+0,0,10,120,0,0,1,0,0,10,109,105,110,86,97,108,0,0,1,0,0,10,109,97,120,86,97,108,0,0,0,1,8,58,109,
105,110,0,58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,
-0,0,0,1,0,12,0,99,108,97,109,112,0,1,0,0,12,120,0,0,1,0,0,12,109,105,110,86,97,108,0,0,1,0,0,12,
+0,0,0,1,0,11,0,99,108,97,109,112,0,1,0,0,11,120,0,0,1,0,0,11,109,105,110,86,97,108,0,0,1,0,0,11,
109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,120,0,18,120,0,0,18,109,105,110,86,97,
-108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,9,0,109,105,120,0,1,0,0,9,120,0,0,1,0,0,9,121,0,
-0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,10,0,
-109,105,120,0,1,0,0,10,120,0,0,1,0,0,10,121,0,0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,
-0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,11,0,109,105,120,0,1,0,0,11,120,0,0,1,0,0,11,121,0,0,1,0,0,
-9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,12,0,109,105,
-120,0,1,0,0,12,120,0,0,1,0,0,12,121,0,0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,
-18,121,0,18,97,0,48,46,0,0,1,0,10,0,109,105,120,0,1,0,0,10,120,0,0,1,0,0,10,121,0,0,1,0,0,10,97,0,
-0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,11,0,109,105,120,0,1,
-0,0,11,120,0,0,1,0,0,11,121,0,0,1,0,0,11,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,
-0,18,97,0,48,46,0,0,1,0,12,0,109,105,120,0,1,0,0,12,120,0,0,1,0,0,12,121,0,0,1,0,0,12,97,0,0,0,1,8,
-18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,9,0,115,116,101,112,0,1,0,0,9,
-101,100,103,101,0,0,1,0,0,9,120,0,0,0,1,8,18,120,0,18,101,100,103,101,0,40,17,48,0,48,0,0,17,49,0,
-48,0,0,31,0,0,1,0,10,0,115,116,101,112,0,1,0,0,10,101,100,103,101,0,0,1,0,0,10,118,0,0,0,1,3,2,0,
-10,1,117,0,0,0,9,18,117,0,59,120,0,58,115,116,101,112,0,18,101,100,103,101,0,59,120,0,0,18,118,0,
-59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,116,101,112,0,18,101,100,103,101,0,59,121,0,0,18,118,
-0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,115,116,101,112,0,1,0,0,11,101,100,103,101,0,0,1,0,0,
-11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,116,101,112,0,18,101,100,103,101,0,
-59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,116,101,112,0,18,101,100,103,101,
-0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,116,101,112,0,18,101,100,103,
-101,0,59,122,0,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,115,116,101,112,0,1,0,0,12,101,
-100,103,101,0,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,115,116,101,112,0,
-18,101,100,103,101,0,59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,116,101,112,
-0,18,101,100,103,101,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,116,101,
-112,0,18,101,100,103,101,0,59,122,0,0,18,118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,115,116,
-101,112,0,18,101,100,103,101,0,59,119,0,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,10,0,115,
+108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,12,0,99,108,97,109,112,0,1,0,0,12,120,0,0,1,0,0,
+12,109,105,110,86,97,108,0,0,1,0,0,12,109,97,120,86,97,108,0,0,0,1,8,58,109,105,110,0,58,109,97,
+120,0,18,120,0,0,18,109,105,110,86,97,108,0,0,0,0,18,109,97,120,86,97,108,0,0,0,0,0,1,0,9,0,109,
+105,120,0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,
+48,18,121,0,18,97,0,48,46,0,0,1,0,10,0,109,105,120,0,1,0,0,10,120,0,0,1,0,0,10,121,0,0,1,0,0,9,97,
+0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,11,0,109,105,120,0,
+1,0,0,11,120,0,0,1,0,0,11,121,0,0,1,0,0,9,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,
+121,0,18,97,0,48,46,0,0,1,0,12,0,109,105,120,0,1,0,0,12,120,0,0,1,0,0,12,121,0,0,1,0,0,9,97,0,0,0,
+1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,10,0,109,105,120,0,1,0,0,
+10,120,0,0,1,0,0,10,121,0,0,1,0,0,10,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,
+18,97,0,48,46,0,0,1,0,11,0,109,105,120,0,1,0,0,11,120,0,0,1,0,0,11,121,0,0,1,0,0,11,97,0,0,0,1,8,
+18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,97,0,48,46,0,0,1,0,12,0,109,105,120,0,1,0,0,12,
+120,0,0,1,0,0,12,121,0,0,1,0,0,12,97,0,0,0,1,8,18,120,0,17,49,0,48,0,0,18,97,0,47,48,18,121,0,18,
+97,0,48,46,0,0,1,0,9,0,115,116,101,112,0,1,0,0,9,101,100,103,101,0,0,1,0,0,9,120,0,0,0,1,8,18,120,
+0,18,101,100,103,101,0,40,17,48,0,48,0,0,17,49,0,48,0,0,31,0,0,1,0,10,0,115,116,101,112,0,1,0,0,10,
+101,100,103,101,0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,115,116,101,112,0,18,101,100,103,
+101,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,116,101,112,0,18,101,100,103,101,0,59,121,0,0,18,
+118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,116,101,112,0,1,0,0,11,101,100,103,101,0,0,1,0,0,11,118,0,
+0,0,1,8,58,118,101,99,51,0,58,115,116,101,112,0,18,101,100,103,101,0,59,120,0,0,18,118,0,59,120,0,
+0,0,0,58,115,116,101,112,0,18,101,100,103,101,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,116,101,
+112,0,18,101,100,103,101,0,59,122,0,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,115,116,101,112,0,1,0,
+0,12,101,100,103,101,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,115,116,101,112,0,18,101,100,
+103,101,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,116,101,112,0,18,101,100,103,101,0,59,121,0,0,
+18,118,0,59,121,0,0,0,0,58,115,116,101,112,0,18,101,100,103,101,0,59,122,0,0,18,118,0,59,122,0,0,0,
+0,58,115,116,101,112,0,18,101,100,103,101,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,10,0,115,
116,101,112,0,1,0,0,9,101,100,103,101,0,0,1,0,0,10,118,0,0,0,1,8,58,115,116,101,112,0,58,118,101,
99,50,0,18,101,100,103,101,0,0,0,0,18,118,0,0,0,0,0,1,0,11,0,115,116,101,112,0,1,0,0,9,101,100,103,
101,0,0,1,0,0,11,118,0,0,0,1,8,58,115,116,101,112,0,58,118,101,99,51,0,18,101,100,103,101,0,0,0,0,
@@ -385,339 +347,292 @@
101,48,0,47,18,101,100,103,101,49,0,18,101,100,103,101,48,0,47,49,0,17,48,0,48,0,0,0,17,49,0,48,0,
0,0,0,20,0,8,18,116,0,18,116,0,48,17,51,0,48,0,0,17,50,0,48,0,0,18,116,0,48,47,48,0,0,1,0,10,0,115,
109,111,111,116,104,115,116,101,112,0,1,0,0,10,101,100,103,101,48,0,0,1,0,0,10,101,100,103,101,49,
-0,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,116,104,115,
-116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,118,0,59,
-120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,
-48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,
-11,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,11,101,100,103,101,48,0,0,1,0,0,11,101,100,
-103,101,49,0,0,1,0,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,
-116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,
-118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,
-100,103,101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,
-0,59,122,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,
-100,103,101,49,0,59,122,0,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,115,109,111,111,116,
-104,115,116,101,112,0,1,0,0,12,101,100,103,101,48,0,0,1,0,0,12,101,100,103,101,49,0,0,1,0,0,12,118,
-0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,116,104,115,116,101,112,0,18,
-101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,118,0,59,120,0,0,0,20,0,9,18,
-117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,121,0,0,18,
-101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,109,111,111,
+0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,
+100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,
+111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,
+121,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,11,
+101,100,103,101,48,0,0,1,0,0,11,101,100,103,101,49,0,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,
+58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,
+49,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,
+103,101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,109,111,
+111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,100,103,101,49,0,59,122,0,
+0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,12,101,
+100,103,101,48,0,0,1,0,0,12,101,100,103,101,49,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,
+115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,
+0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,
+101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,109,111,111,
116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,100,103,101,49,0,59,122,0,0,18,
-118,0,59,122,0,0,0,20,0,9,18,117,0,59,119,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,
-100,103,101,48,0,59,119,0,0,18,101,100,103,101,49,0,59,119,0,0,18,118,0,59,119,0,0,0,20,0,8,18,117,
-0,0,0,1,0,10,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,
-101,100,103,101,49,0,0,1,0,0,10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,
-111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,
-120,0,0,0,20,0,9,18,117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,
-48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,20,0,8,18,117,0,0,0,1,0,11,0,115,109,111,
-111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,
-11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,116,104,115,116,101,112,
-0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,20,0,9,18,117,0,59,121,
-0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,
-18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,
-100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,122,0,0,0,20,0,8,18,117,0,0,0,1,0,12,0,
-115,109,111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,
-49,0,0,1,0,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,115,109,111,111,116,104,
-115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,20,0,9,
-18,117,0,59,121,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,
-100,103,101,49,0,0,18,118,0,59,121,0,0,0,20,0,9,18,117,0,59,122,0,58,115,109,111,111,116,104,115,
-116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,122,0,0,0,20,0,9,18,
-117,0,59,119,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,
-103,101,49,0,0,18,118,0,59,119,0,0,0,20,0,8,18,117,0,0,0,1,0,9,0,100,111,116,0,1,0,0,9,120,0,0,1,0,
-0,9,121,0,0,0,1,8,18,120,0,18,121,0,48,0,0,1,0,9,0,100,111,116,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,
-0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,118,0,59,121,0,18,117,0,59,121,0,48,46,0,0,1,0,9,0,
-100,111,116,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,
-118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,48,46,0,0,1,0,9,0,100,
-111,116,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,118,0,
-59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,48,46,18,118,0,59,119,0,18,
-117,0,59,119,0,48,46,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,9,120,0,0,0,1,8,58,115,113,114,
-116,0,58,100,111,116,0,18,120,0,0,18,120,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,10,
-118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,108,
-101,110,103,116,104,0,1,0,0,11,118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,118,0,0,18,
-118,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,12,118,0,0,0,1,8,58,115,113,114,116,0,58,
-100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,9,120,
-0,0,1,0,0,9,121,0,0,0,1,8,58,108,101,110,103,116,104,0,18,120,0,18,121,0,47,0,0,0,0,1,0,9,0,100,
-105,115,116,97,110,99,101,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,108,101,110,103,116,104,0,
-18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,11,118,0,0,1,0,0,11,117,
-0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,116,97,110,
-99,101,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,18,117,0,47,
-0,0,0,0,1,0,11,0,99,114,111,115,115,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,
-18,116,0,59,120,0,18,118,0,59,121,0,18,117,0,59,122,0,48,18,117,0,59,121,0,18,118,0,59,122,0,48,47,
-20,0,9,18,116,0,59,121,0,18,118,0,59,122,0,18,117,0,59,120,0,48,18,117,0,59,122,0,18,118,0,59,120,
-0,48,47,20,0,9,18,116,0,59,122,0,18,118,0,59,120,0,18,117,0,59,121,0,48,18,117,0,59,120,0,18,118,0,
-59,121,0,48,47,20,0,8,18,116,0,0,0,1,0,9,0,110,111,114,109,97,108,105,122,101,0,1,0,0,9,120,0,0,0,
-1,8,17,49,0,48,0,0,0,0,1,0,10,0,110,111,114,109,97,108,105,122,101,0,1,0,0,10,118,0,0,0,1,8,18,118,
-0,58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,11,0,110,111,114,109,97,108,105,122,101,0,1,
-0,0,11,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,12,0,110,111,
-114,109,97,108,105,122,101,0,1,0,0,12,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,18,118,0,
-0,0,49,0,0,1,0,9,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,9,78,0,0,1,0,0,9,73,0,0,1,0,0,
-9,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,
-78,0,18,78,0,54,31,0,0,1,0,10,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,10,78,0,0,1,0,0,
-10,73,0,0,1,0,0,10,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,
-48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,11,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,
-11,78,0,0,1,0,0,11,73,0,0,1,0,0,11,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,
-18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,12,0,102,97,99,101,102,111,114,119,97,
-114,100,0,1,0,0,12,78,0,0,1,0,0,12,73,0,0,1,0,0,12,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,
-114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,9,0,114,101,102,108,
-101,99,116,0,1,0,0,9,73,0,0,1,0,0,9,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,
-18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,10,0,114,101,102,108,101,99,116,0,1,0,0,10,73,0,0,1,0,0,10,78,
-0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,
-11,0,114,101,102,108,101,99,116,0,1,0,0,11,73,0,0,1,0,0,11,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,
-100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,12,0,114,101,102,108,101,99,116,0,1,0,
-0,12,73,0,0,1,0,0,12,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,
-18,78,0,48,47,0,0,1,0,9,0,114,101,102,114,97,99,116,0,1,0,0,9,73,0,0,1,0,0,9,78,0,0,1,0,0,9,101,
-116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,
-49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,
-47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,
-101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,
-0,48,47,0,0,1,0,10,0,114,101,102,114,97,99,116,0,1,0,0,10,73,0,0,1,0,0,10,78,0,0,1,0,0,9,101,116,
-97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,49,
-0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,
-20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,
-116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,
-47,0,0,1,0,11,0,114,101,102,114,97,99,116,0,1,0,0,11,73,0,0,1,0,0,11,78,0,0,1,0,0,9,101,116,97,0,0,
-0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,
-0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,
-10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,
-97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,
-0,0,1,0,12,0,114,101,102,114,97,99,116,0,1,0,0,12,73,0,0,1,0,0,12,78,0,0,1,0,0,9,101,116,97,0,0,0,
-1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,
-58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,
-18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,
-0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,
-1,0,13,0,109,97,116,114,105,120,67,111,109,112,77,117,108,116,0,1,0,0,13,109,0,0,1,0,0,13,110,0,0,
-0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,20,
-0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,20,0,8,18,111,0,0,0,1,
-0,14,0,109,97,116,114,105,120,67,111,109,112,77,117,108,116,0,1,0,0,14,109,0,0,1,0,0,14,110,0,0,0,
-1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,20,0,
-9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,20,0,9,18,111,0,16,10,50,
-0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,48,20,0,8,18,111,0,0,0,1,0,15,0,109,97,116,114,
-105,120,67,111,109,112,77,117,108,116,0,1,0,0,15,109,0,0,1,0,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,
-9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,
-57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,
-50,0,57,18,110,0,16,10,50,0,57,48,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,110,0,16,
-10,51,0,57,48,20,0,8,18,111,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,10,118,0,0,1,0,0,
-10,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,40,20,0,9,
-18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,40,20,0,8,18,98,0,0,0,1,0,3,0,108,101,115,115,
-84,104,97,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,
-0,59,120,0,18,117,0,59,120,0,40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,40,20,
-0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,40,20,0,8,18,98,0,0,0,1,0,4,0,108,101,115,
-115,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,
-118,0,59,120,0,18,117,0,59,120,0,40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,40,
-20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,40,20,0,9,18,98,0,59,119,0,18,118,0,59,
-119,0,18,117,0,59,119,0,40,20,0,8,18,98,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,6,118,
-0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,
-40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,40,20,0,8,18,98,0,0,0,1,0,3,0,108,
-101,115,115,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,18,98,0,59,
-120,0,18,118,0,59,120,0,18,117,0,59,120,0,40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,
-121,0,40,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,40,20,0,8,18,98,0,0,0,1,0,4,0,
-108,101,115,115,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,40,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,
-59,121,0,40,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,40,20,0,9,18,98,0,59,119,0,
-18,118,0,59,119,0,18,117,0,59,119,0,40,20,0,8,18,98,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,69,
-113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,
-118,0,59,120,0,18,117,0,59,120,0,42,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,
-20,0,8,18,98,0,0,0,1,0,3,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,
-0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,42,20,0,
-9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,20,0,9,18,98,0,59,122,0,18,118,0,59,122,
-0,18,117,0,59,122,0,42,20,0,8,18,98,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,69,113,117,97,108,
-0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,
-117,0,59,120,0,42,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,20,0,9,18,98,0,59,
-122,0,18,118,0,59,122,0,18,117,0,59,122,0,42,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,
-119,0,42,20,0,8,18,98,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,6,118,
-0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,
-42,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,20,0,8,18,98,0,0,0,1,0,3,0,108,
-101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,1,98,0,0,
-0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,42,20,0,9,18,98,0,59,121,0,18,118,0,59,
-121,0,18,117,0,59,121,0,42,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,42,20,0,8,
-18,98,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,
-0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,42,20,0,9,18,98,
-0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,42,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,
-0,59,122,0,42,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,42,20,0,8,18,98,0,0,0,1,
-0,2,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,2,1,
-98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,118,
-0,59,121,0,18,117,0,59,121,0,41,20,0,8,18,98,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,
-110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,
-0,18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,41,20,0,9,18,98,
-0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,41,20,0,8,18,98,0,0,0,1,0,4,0,103,114,101,97,116,
-101,114,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,
-0,18,118,0,59,120,0,18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,
-0,41,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,41,20,0,9,18,98,0,59,119,0,18,118,
-0,59,119,0,18,117,0,59,119,0,41,20,0,8,18,98,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,
-110,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,
-18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,41,20,0,8,18,98,0,
-0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,
-1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,41,20,0,9,18,98,0,59,121,0,18,
-118,0,59,121,0,18,117,0,59,121,0,41,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,41,
-20,0,8,18,98,0,0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,117,
-0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,41,20,0,9,18,98,
-0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,41,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,
-0,59,122,0,41,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,41,20,0,8,18,98,0,0,0,1,
-0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,
-0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,98,0,
-59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,43,20,0,8,18,98,0,0,0,1,0,3,0,103,114,101,97,116,101,
-114,84,104,97,110,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,
-18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,
-18,117,0,59,121,0,43,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,43,20,0,8,18,98,0,
-0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,
-117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,
-98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,43,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,
-117,0,59,122,0,43,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,43,20,0,8,18,98,0,0,
-0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,
-0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,98,
-0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,43,20,0,8,18,98,0,0,0,1,0,3,0,103,114,101,97,116,
-101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,
-18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,
-18,117,0,59,121,0,43,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,43,20,0,8,18,98,0,
-0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,
-117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,43,20,0,9,18,
-98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,43,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,
-117,0,59,122,0,43,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,43,20,0,8,18,98,0,0,
-0,1,0,2,0,101,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,
-59,121,0,38,20,0,8,18,98,0,0,0,1,0,3,0,101,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,
-3,2,0,3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,
-0,18,118,0,59,121,0,18,117,0,59,121,0,38,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,
-0,38,20,0,8,18,98,0,0,0,1,0,4,0,101,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,
-1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,
-118,0,59,121,0,18,117,0,59,121,0,38,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,38,
-20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,38,20,0,8,18,98,0,0,0,1,0,2,0,101,113,
-117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,
-120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,38,20,0,8,
-18,98,0,0,0,1,0,3,0,101,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,3,1,98,0,0,0,9,
-18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,
-18,117,0,59,121,0,38,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,38,20,0,8,18,98,0,
-0,0,1,0,4,0,101,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,3,2,0,4,1,98,0,0,0,9,18,98,0,
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,38,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,
-59,121,0,38,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,38,20,0,9,18,98,0,59,119,0,
-18,118,0,59,119,0,18,117,0,59,119,0,38,20,0,8,18,98,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,
-1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,
-117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,39,20,0,8,18,98,0,0,
-0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,3,2,0,3,1,98,0,0,0,
-9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,118,0,59,121,
-0,18,117,0,59,121,0,39,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,39,20,0,8,18,98,
-0,0,0,1,0,4,0,110,111,116,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,3,2,0,4,1,98,0,
-0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,118,0,59,
-121,0,18,117,0,59,121,0,39,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,39,20,0,9,
-18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,39,20,0,8,18,98,0,0,0,1,0,2,0,110,111,116,69,
-113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,3,2,0,2,1,98,0,0,0,9,18,98,0,59,120,0,18,118,
-0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,39,20,
-0,8,18,98,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,3,2,0,
-3,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,18,
-118,0,59,121,0,18,117,0,59,121,0,39,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,39,
-20,0,8,18,98,0,0,0,1,0,4,0,110,111,116,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,3,2,
-0,4,1,98,0,0,0,9,18,98,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,39,20,0,9,18,98,0,59,121,0,
-18,118,0,59,121,0,18,117,0,59,121,0,39,20,0,9,18,98,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,
-39,20,0,9,18,98,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,39,20,0,8,18,98,0,0,0,1,0,1,0,97,
-110,121,0,1,0,0,2,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,32,0,0,1,0,1,0,97,110,121,0,1,
-0,0,3,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,32,18,118,0,59,122,0,32,0,0,1,0,1,0,97,110,
-121,0,1,0,0,4,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,32,18,118,0,59,122,0,32,18,118,0,
-59,119,0,32,0,0,1,0,1,0,97,108,108,0,1,0,0,2,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,
-0,0,1,0,1,0,97,108,108,0,1,0,0,3,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,118,0,59,
-122,0,34,0,0,1,0,1,0,97,108,108,0,1,0,0,4,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,
-118,0,59,122,0,34,18,118,0,59,119,0,34,0,0,1,0,2,0,110,111,116,0,1,0,0,2,118,0,0,0,1,3,2,0,2,1,117,
-0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,56,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,56,20,0,
-8,18,117,0,0,0,1,0,3,0,110,111,116,0,1,0,0,3,118,0,0,0,1,3,2,0,3,1,117,0,0,0,9,18,117,0,59,120,0,
-18,118,0,59,120,0,56,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,56,20,0,9,18,117,0,59,122,0,18,118,
-0,59,122,0,56,20,0,8,18,117,0,0,0,1,0,4,0,110,111,116,0,1,0,0,4,118,0,0,0,1,3,2,0,4,1,117,0,0,0,9,
-18,117,0,59,120,0,18,118,0,59,120,0,56,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,56,20,0,9,18,117,
-0,59,122,0,18,118,0,59,122,0,56,20,0,9,18,117,0,59,119,0,18,118,0,59,119,0,56,20,0,8,18,117,0,0,0,
-1,0,12,0,116,101,120,116,117,114,101,49,68,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,9,99,
-111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,
-114,101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,10,99,111,111,114,100,
-0,0,0,1,8,58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,
-114,100,0,59,115,0,18,99,111,111,114,100,0,59,116,0,49,0,0,0,0,1,0,12,0,116,101,120,116,117,114,
-101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,
-0,1,8,58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,
-100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,
-68,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,0,1,8,58,118,101,99,
-52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,
-115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,
-59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,0,49,20,0,9,18,117,0,59,
-116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,20,0,8,58,116,101,120,
-116,117,114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,0,0,0,1,0,12,0,116,101,120,
-116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,
-114,100,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,
-111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,
-111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,
-114,0,0,18,117,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,0,1,0,0,18,115,97,109,112,108,
+118,0,59,122,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,119,0,
+0,18,101,100,103,101,49,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,10,0,115,109,111,111,116,
+104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,10,118,0,
+0,0,1,8,58,118,101,99,50,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,
+18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,
+101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,109,
+111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,
+0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,
+103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,
+116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,0,58,115,
+109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,
+59,122,0,0,0,0,0,0,0,1,0,12,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,
+0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,115,109,111,111,
+116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,
+0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,
+0,18,118,0,59,121,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,
+18,101,100,103,101,49,0,0,18,118,0,59,122,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,
+101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,100,111,116,
+0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,48,0,0,1,0,9,0,100,111,116,0,1,0,0,10,
+118,0,0,1,0,0,10,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,118,0,59,121,0,18,117,0,
+59,121,0,48,46,0,0,1,0,9,0,100,111,116,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,59,120,0,
+18,117,0,59,120,0,48,18,118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,
+48,46,0,0,1,0,9,0,100,111,116,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,
+59,120,0,48,18,118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,48,46,18,
+118,0,59,119,0,18,117,0,59,119,0,48,46,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,9,120,0,0,0,1,8,
+58,115,113,114,116,0,58,100,111,116,0,18,120,0,0,18,120,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,
+104,0,1,0,0,10,118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,
+1,0,9,0,108,101,110,103,116,104,0,1,0,0,11,118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,
+118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,12,118,0,0,0,1,8,58,115,113,
+114,116,0,58,100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,
+1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,58,108,101,110,103,116,104,0,18,120,0,18,121,0,47,0,0,0,0,1,
+0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,108,101,110,103,
+116,104,0,18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,11,118,0,0,1,
+0,0,11,117,0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,
+116,97,110,99,101,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,
+18,117,0,47,0,0,0,0,1,0,11,0,99,114,111,115,115,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,
+101,99,51,0,18,118,0,59,121,0,18,117,0,59,122,0,48,18,117,0,59,121,0,18,118,0,59,122,0,48,47,0,18,
+118,0,59,122,0,18,117,0,59,120,0,48,18,117,0,59,122,0,18,118,0,59,120,0,48,47,0,18,118,0,59,120,0,
+18,117,0,59,121,0,48,18,117,0,59,120,0,18,118,0,59,121,0,48,47,0,0,0,0,1,0,9,0,110,111,114,109,97,
+108,105,122,101,0,1,0,0,9,120,0,0,0,1,8,17,49,0,48,0,0,0,0,1,0,10,0,110,111,114,109,97,108,105,122,
+101,0,1,0,0,10,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,11,0,
+110,111,114,109,97,108,105,122,101,0,1,0,0,11,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,
+18,118,0,0,0,49,0,0,1,0,12,0,110,111,114,109,97,108,105,122,101,0,1,0,0,12,118,0,0,0,1,8,18,118,0,
+58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,9,0,102,97,99,101,102,111,114,119,97,114,100,
+0,1,0,0,9,78,0,0,1,0,0,9,73,0,0,1,0,0,9,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,
+102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,10,0,102,97,99,101,102,111,114,
+119,97,114,100,0,1,0,0,10,78,0,0,1,0,0,10,73,0,0,1,0,0,10,78,114,101,102,0,0,0,1,8,58,100,111,116,
+0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,11,0,102,97,99,
+101,102,111,114,119,97,114,100,0,1,0,0,11,78,0,0,1,0,0,11,73,0,0,1,0,0,11,78,114,101,102,0,0,0,1,8,
+58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,
+12,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,12,78,0,0,1,0,0,12,73,0,0,1,0,0,12,78,114,
+101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,
+78,0,54,31,0,0,1,0,9,0,114,101,102,108,101,99,116,0,1,0,0,9,73,0,0,1,0,0,9,78,0,0,0,1,8,18,73,0,17,
+50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,10,0,114,101,102,108,
+101,99,116,0,1,0,0,10,73,0,0,1,0,0,10,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,
+0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,11,0,114,101,102,108,101,99,116,0,1,0,0,11,73,0,0,1,0,0,11,
+78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,
+0,12,0,114,101,102,108,101,99,116,0,1,0,0,12,73,0,0,1,0,0,12,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,
+58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,9,0,114,101,102,114,97,99,116,0,1,
+0,0,9,73,0,0,1,0,0,9,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,
+0,18,101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,
+111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,
+0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,
+115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,10,0,114,101,102,114,97,99,116,0,1,0,0,10,
+73,0,0,1,0,0,10,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,
+101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,
+116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,
+14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,
+113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,11,0,114,101,102,114,97,99,116,0,1,0,0,11,73,0,
+0,1,0,0,11,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,
+116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,
+18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,
+18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,
+114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,12,0,114,101,102,114,97,99,116,0,1,0,0,12,73,0,0,1,
+0,0,12,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,
+97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,
+78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,
+101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,
+116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,13,0,109,97,116,114,105,120,67,111,109,112,77,117,108,
+116,0,1,0,0,13,109,0,0,1,0,0,13,110,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,110,0,16,
+8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,0,0,0,0,1,0,14,0,109,97,116,114,
+105,120,67,111,109,112,77,117,108,116,0,1,0,0,14,109,0,0,1,0,0,14,110,0,0,0,1,8,58,109,97,116,51,0,
+18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,
+0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,48,0,0,0,0,1,0,15,0,109,97,116,114,105,120,67,111,
+109,112,77,117,108,116,0,1,0,0,15,109,0,0,1,0,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,
+48,0,57,18,110,0,16,8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,0,18,109,0,16,
+10,50,0,57,18,110,0,16,10,50,0,57,48,0,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,48,0,0,0,0,1,
+0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,
+0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,0,0,0,1,0,3,0,
+108,101,115,115,84,104,97,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,
+118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,18,118,0,59,122,0,
+18,117,0,59,122,0,40,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,
+0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,
+0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,18,118,0,59,119,0,18,117,0,59,119,0,40,0,
+0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,
+99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,0,0,0,1,
+0,3,0,108,101,115,115,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,
+18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,18,118,0,59,122,
+0,18,117,0,59,122,0,40,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,117,
+0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,
+0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,18,118,0,59,119,0,18,117,0,59,119,0,40,0,
+0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,
+0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,
+121,0,42,0,0,0,0,1,0,3,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,
+11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,
+18,117,0,59,121,0,42,0,18,118,0,59,122,0,18,117,0,59,122,0,42,0,0,0,0,1,0,4,0,108,101,115,115,84,
+104,97,110,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,
+118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,122,0,
+18,117,0,59,122,0,42,0,18,118,0,59,119,0,18,117,0,59,119,0,42,0,0,0,0,1,0,2,0,108,101,115,115,84,
+104,97,110,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,
+0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,0,0,0,1,0,3,0,108,101,
+115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,
+51,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,
+122,0,18,117,0,59,122,0,42,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,
+8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,
+118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,122,0,18,117,0,59,122,0,42,0,18,118,0,59,119,0,
+18,117,0,59,119,0,42,0,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,10,118,0,0,1,
+0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,
+121,0,18,117,0,59,121,0,41,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,11,118,
+0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,
+59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,0,59,122,0,41,0,0,0,0,1,0,4,0,103,114,101,
+97,116,101,114,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,
+118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,
+18,117,0,59,122,0,41,0,18,118,0,59,119,0,18,117,0,59,119,0,41,0,0,0,0,1,0,2,0,103,114,101,97,116,
+101,114,84,104,97,110,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,
+120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,0,0,0,1,0,3,0,103,114,101,97,
+116,101,114,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,
+59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,
+0,59,122,0,41,0,0,0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,
+117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,
+117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,0,59,122,0,41,0,18,118,0,59,119,0,18,117,0,59,119,0,
+41,0,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,10,118,0,0,1,
+0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,
+121,0,18,117,0,59,121,0,43,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,
+108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,
+120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,0,0,0,
+1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,
+0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,
+0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,18,118,0,59,119,0,18,117,0,59,119,0,43,0,
+0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,
+117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,
+117,0,59,121,0,43,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,
+0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,
+18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,0,0,0,1,0,4,0,
+103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,
+58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,
+43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,18,118,0,59,119,0,18,117,0,59,119,0,43,0,0,0,0,1,0,2,
+0,101,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,
+120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,0,0,0,1,0,3,0,101,113,117,97,
+108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,
+120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,0,0,0,
+1,0,4,0,101,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,
+0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,
+117,0,59,122,0,38,0,18,118,0,59,119,0,18,117,0,59,119,0,38,0,0,0,0,1,0,2,0,101,113,117,97,108,0,1,
+0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,
+18,118,0,59,121,0,18,117,0,59,121,0,38,0,0,0,0,1,0,3,0,101,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,
+7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,
+18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,0,0,0,1,0,4,0,101,113,117,97,108,0,
+1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,38,
+0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,18,118,0,59,
+119,0,18,117,0,59,119,0,38,0,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,
+10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,
+18,117,0,59,121,0,39,0,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,
+0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,117,
+0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,0,0,0,1,0,4,0,110,111,116,69,113,117,97,
+108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,
+120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,18,
+118,0,59,119,0,18,117,0,59,119,0,39,0,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,1,0,0,6,118,0,
+0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,
+121,0,18,117,0,59,121,0,39,0,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,
+117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,
+117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,0,0,0,1,0,4,0,110,111,116,69,113,117,
+97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,
+120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,18,
+118,0,59,119,0,18,117,0,59,119,0,39,0,0,0,0,1,0,1,0,97,110,121,0,1,0,0,2,118,0,0,0,1,8,18,118,0,59,
+120,0,18,118,0,59,121,0,32,0,0,1,0,1,0,97,110,121,0,1,0,0,3,118,0,0,0,1,8,18,118,0,59,120,0,18,118,
+0,59,121,0,32,18,118,0,59,122,0,32,0,0,1,0,1,0,97,110,121,0,1,0,0,4,118,0,0,0,1,8,18,118,0,59,120,
+0,18,118,0,59,121,0,32,18,118,0,59,122,0,32,18,118,0,59,119,0,32,0,0,1,0,1,0,97,108,108,0,1,0,0,2,
+118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,0,0,1,0,1,0,97,108,108,0,1,0,0,3,118,0,0,0,1,
+8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,118,0,59,122,0,34,0,0,1,0,1,0,97,108,108,0,1,0,0,4,118,
+0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,118,0,59,122,0,34,18,118,0,59,119,0,34,0,0,1,0,
+2,0,110,111,116,0,1,0,0,2,118,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,56,0,18,118,0,59,
+121,0,56,0,0,0,0,1,0,3,0,110,111,116,0,1,0,0,3,118,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,
+0,56,0,18,118,0,59,121,0,56,0,18,118,0,59,122,0,56,0,0,0,0,1,0,4,0,110,111,116,0,1,0,0,4,118,0,0,0,
+1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,56,0,18,118,0,59,121,0,56,0,18,118,0,59,122,0,56,0,18,
+118,0,59,119,0,56,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,68,0,1,0,0,16,115,97,109,112,108,
+101,114,0,0,1,0,0,9,99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,
+0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,
+10,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,
+114,0,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,116,0,49,0,0,0,0,1,0,12,0,116,
+101,120,116,117,114,101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,12,99,
+111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,114,0,0,
+18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,1,0,12,0,116,101,120,
+116,117,114,101,50,68,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,0,
+1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,95,116,101,120,50,100,0,18,116,101,120,101,
+108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,8,18,116,101,120,101,108,0,0,
+0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,
+0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,
+108,101,114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,
+0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,0,0,0,0,0,0,1,0,12,0,
+116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,
+12,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,
+114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,
+18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,12,0,116,101,
+120,116,117,114,101,51,68,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,
+0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,80,
+114,111,106,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,116,
+101,120,116,117,114,101,51,68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,
+114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,
+111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,
+49,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,67,117,98,101,0,1,0,0,19,115,97,109,112,108,
101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,
-0,116,101,120,116,117,114,101,51,68,80,114,111,106,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,
-12,99,111,111,114,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,
-115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,
-0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,
-99,111,111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,51,68,0,18,115,97,109,112,
-108,101,114,0,0,18,117,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,67,117,98,101,0,1,0,0,19,115,
-97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,
-0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,
-99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,
-119,50,68,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,118,
-101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,80,114,111,106,0,1,0,0,20,
-115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,
-59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,
-116,0,17,48,0,48,0,0,20,0,9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,
-100,0,59,113,0,49,20,0,8,58,115,104,97,100,111,119,49,68,0,18,115,97,109,112,108,101,114,0,0,18,
-117,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,112,108,
-101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,
-111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,
-114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,114,
-100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,115,104,97,100,111,119,50,68,0,18,115,
-97,109,112,108,101,114,0,0,18,117,0,0,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,9,120,0,0,0,1,3,
-2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,49,0,18,97,0,0,18,120,0,0,0,8,18,97,0,
-0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,10,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,
-95,110,111,105,115,101,50,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,
-1,0,0,11,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,51,0,18,97,0,0,
-18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,12,120,0,0,0,1,3,2,0,9,1,97,0,0,
-0,4,102,108,111,97,116,95,110,111,105,115,101,52,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,10,0,
-110,111,105,115,101,50,0,1,0,0,9,120,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,
-105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,
-57,0,51,52,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,10,120,0,0,0,1,3,
-2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,
-121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,
-0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,11,120,0,0,0,1,3,2,0,10,
-1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,
-58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,
-17,51,0,50,51,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,12,120,0,
-0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,
-117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,
-55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,11,0,110,
-111,105,115,101,51,0,1,0,0,9,120,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,
-115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,
-51,52,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,
-46,0,0,20,0,8,18,117,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,10,120,0,0,0,1,3,2,0,11,1,117,0,
-0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,
-111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,
-0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,
-0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,11,
-120,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,
-9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,
-17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,
-49,0,18,120,0,58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,
-0,46,0,0,20,0,8,18,117,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,12,120,0,0,0,1,3,2,0,11,1,117,
-0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,
-111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,
-0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,18,
-120,0,58,118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,
-51,0,49,57,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,9,120,0,0,0,
-1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,117,
-0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20,0,9,18,117,0,59,122,
-0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,20,0,9,18,117,0,59,119,0,58,110,
-111,105,115,101,49,0,18,120,0,17,50,51,0,53,52,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,12,0,110,111,105,
-115,101,52,0,1,0,0,10,120,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,
-49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,
-17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,
-101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,20,0,9,18,
-117,0,59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,50,51,0,53,52,0,0,0,17,
-50,57,0,49,49,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,11,120,0,
-0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,115,101,49,0,18,120,0,0,0,20,0,9,18,
-117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,
-55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,
-18,120,0,58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,
-0,0,20,0,9,18,117,0,59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,50,51,0,53,
-52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,1,0,12,0,110,
-111,105,115,101,52,0,1,0,0,12,120,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,58,110,111,105,
-115,101,49,0,18,120,0,0,0,20,0,9,18,117,0,59,121,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,
-99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,
-0,20,0,9,18,117,0,59,122,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,53,0,52,55,0,
-0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,20,0,9,18,117,0,
-59,119,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,50,51,0,53,52,0,0,0,17,50,57,0,
-49,49,0,0,0,17,51,49,0,57,49,0,0,0,17,51,55,0,52,56,0,0,0,0,46,0,0,20,0,8,18,117,0,0,0,0
+0,115,104,97,100,111,119,49,68,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,
+100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,0,1,
+0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,58,118,101,99,52,0,17,
+48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,80,114,111,106,0,1,0,0,20,115,97,109,112,
+108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,115,104,97,100,111,119,49,68,0,18,115,97,
+109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,
+0,59,113,0,49,0,17,48,0,48,0,0,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,
+49,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,112,108,
+101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,115,104,97,100,111,119,50,68,0,18,115,97,109,
+112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,
+113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,
+114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,9,0,110,111,105,115,101,49,
+0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,49,0,18,97,0,
+0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,10,120,0,0,0,1,3,2,0,9,1,97,0,
+0,0,4,102,108,111,97,116,95,110,111,105,115,101,50,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,
+110,111,105,115,101,49,0,1,0,0,11,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,
+105,115,101,51,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,12,
+120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,52,0,18,97,0,0,18,120,0,
+0,0,8,18,97,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,9,120,0,0,0,1,8,58,118,101,99,50,0,58,
+110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,
+46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,10,120,0,0,0,1,8,58,118,101,99,50,0,58,110,
+111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,
+57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,11,
+120,0,0,0,1,8,58,118,101,99,50,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,
+49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,
+46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,12,120,0,0,0,1,8,58,118,101,99,50,0,58,110,
+111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,
+57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,0,0,0,1,0,
+11,0,110,111,105,115,101,51,0,1,0,0,9,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,101,49,0,
+18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,0,58,110,111,105,
+115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,0,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,10,
+120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,
+49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,58,110,111,
+105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,0,
+0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,11,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,
+115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,
+52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,
+58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,0,0,0,0,
+0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,12,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,
+101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,
+0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,58,110,111,105,115,101,
+49,0,18,120,0,58,118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,
+17,49,51,0,49,57,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,9,120,0,0,0,1,8,58,
+118,101,99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,
+49,57,0,51,52,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,0,58,110,
+111,105,115,101,49,0,18,120,0,17,50,51,0,53,52,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,
+0,1,0,0,10,120,0,0,0,1,8,58,118,101,99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,
+105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,
+58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,
+0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,50,51,0,53,52,0,0,0,17,50,57,
+0,49,49,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,11,120,0,0,0,1,8,58,118,101,
+99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,
+99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,0,58,110,111,105,
+115,101,49,0,18,120,0,58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,
+52,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,50,51,0,53,52,0,0,0,
+17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,
+0,0,12,120,0,0,0,1,8,58,118,101,99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,
+115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,
+0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,53,
+0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,0,58,
+110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,
+17,51,49,0,57,49,0,0,0,17,51,55,0,52,56,0,0,0,0,46,0,0,0,0,0,0,0
diff --git a/src/mesa/shader/slang/library/slang_core.gc b/src/mesa/shader/slang/library/slang_core.gc
index 3f976d5f6a4..40db02a2634 100755
--- a/src/mesa/shader/slang/library/slang_core.gc
+++ b/src/mesa/shader/slang/library/slang_core.gc
@@ -104,10 +104,7 @@ float __constructor (const float f) {
}
vec2 __constructor (const float f) {
- vec2 u;
- u.x = f;
- u.y = f;
- return u;
+ return vec2 (f, f);
}
vec2 __constructor (const int i) {
@@ -121,11 +118,7 @@ vec2 __constructor (const bool b) {
}
vec3 __constructor (const float f) {
- vec3 u;
- u.x = f;
- u.y = f;
- u.z = f;
- return u;
+ return vec3 (f, f, f);
}
vec3 __constructor (const int i) {
@@ -139,12 +132,7 @@ vec3 __constructor (const bool b) {
}
vec4 __constructor (const float f) {
- vec4 u;
- u.x = f;
- u.y = f;
- u.z = f;
- u.w = f;
- return u;
+ return vec4 (f, f, f, f);
}
vec4 __constructor (const int i) {
@@ -158,10 +146,7 @@ vec4 __constructor (const bool b) {
}
ivec2 __constructor (const int i) {
- ivec2 u;
- u.x = i;
- u.y = i;
- return u;
+ return ivec2 (i, i);
}
ivec2 __constructor (const float f) {
@@ -173,11 +158,7 @@ ivec2 __constructor (const bool b) {
}
ivec3 __constructor (const int i) {
- ivec3 u;
- u.x = i;
- u.y = i;
- u.z = i;
- return u;
+ return ivec3 (i, i, i);
}
ivec3 __constructor (const float f) {
@@ -189,12 +170,7 @@ ivec3 __constructor (const bool b) {
}
ivec4 __constructor (const int i) {
- ivec4 u;
- u.x = i;
- u.y = i;
- u.z = i;
- u.w = i;
- return u;
+ return ivec4 (i, i, i, i);
}
ivec4 __constructor (const float f) {
@@ -206,10 +182,7 @@ ivec4 __constructor (const bool b) {
}
bvec2 __constructor (const bool b) {
- bvec2 u;
- u.x = b;
- u.y = b;
- return u;
+ return bvec2 (b, b);
}
bvec2 __constructor (const float f) {
@@ -221,11 +194,7 @@ bvec2 __constructor (const int i) {
}
bvec3 __constructor (const bool b) {
- bvec3 u;
- u.x = b;
- u.y = b;
- u.z = b;
- return u;
+ return bvec3 (b, b, b);
}
bvec3 __constructor (const float f) {
@@ -237,12 +206,7 @@ bvec3 __constructor (const int i) {
}
bvec4 __constructor (const bool b) {
- bvec4 u;
- u.x = b;
- u.y = b;
- u.z = b;
- u.w = b;
- return u;
+ return bvec4 (b, b, b, b);
}
bvec4 __constructor (const float f) {
@@ -254,12 +218,7 @@ bvec4 __constructor (const int i) {
}
mat2 __constructor (const float f) {
- mat2 m;
- m[0].x = f;
- m[0].y = 0.0;
- m[1].x = 0.0;
- m[1].y = f;
- return m;
+ return mat2 (f, 0.0, 0.0, f);
}
mat2 __constructor (const int i) {
@@ -273,17 +232,7 @@ mat2 __constructor (const bool b) {
}
mat3 __constructor (const float f) {
- mat3 m;
- m[0].x = f;
- m[0].y = 0.0;
- m[0].z = 0.0;
- m[1].x = 0.0;
- m[1].y = f;
- m[1].z = 0.0;
- m[2].x = 0.0;
- m[2].y = 0.0;
- m[2].z = f;
- return m;
+ return mat3 (f, 0.0, 0.0, 0.0, f, 0.0, 0.0, 0.0, f);
}
mat3 __constructor (const int i) {
@@ -297,24 +246,7 @@ mat3 __constructor (const bool b) {
}
mat4 __constructor (const float f) {
- mat4 m;
- m[0].x = f;
- m[0].y = 0.0;
- m[0].z = 0.0;
- m[0].w = 0.0;
- m[1].x = 0.0;
- m[1].y = f;
- m[1].z = 0.0;
- m[1].w = 0.0;
- m[2].x = 0.0;
- m[2].y = 0.0;
- m[2].z = f;
- m[2].w = 0.0;
- m[3].x = 0.0;
- m[3].y = 0.0;
- m[3].z = 0.0;
- m[3].w = f;
- return m;
+ return mat4 (f, 0.0, 0.0, 0.0, 0.0, f, 0.0, 0.0, 0.0, 0.0, f, 0.0, 0.0, 0.0, 0.0, f);
}
mat4 __constructor (const int i) {
@@ -549,17 +481,14 @@ void __operator -= (inout mat2 m, const mat2 n) {
}
vec2 __operator * (const mat2 m, const vec2 v) {
- vec2 u;
- u.x = v.x * m[0].x + v.y * m[1].x;
- u.y = v.x * m[0].y + v.y * m[1].y;
- return u;
+ return vec2 (
+ v.x * m[0].x + v.y * m[1].x,
+ v.x * m[0].y + v.y * m[1].y
+ );
}
mat2 __operator * (const mat2 m, const mat2 n) {
- mat2 o;
- o[0] = m * n[0];
- o[1] = m * n[1];
- return o;
+ return mat2 (m * n[0], m * n[1]);
}
void __operator *= (inout mat2 m, const mat2 n) {
@@ -584,19 +513,15 @@ void __operator -= (inout mat3 m, const mat3 n) {
}
vec3 __operator * (const mat3 m, const vec3 v) {
- vec3 u;
- u.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x;
- u.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y;
- u.z = v.x * m[0].z + v.y * m[1].z + v.z * m[2].z;
- return u;
+ return vec3 (
+ v.x * m[0].x + v.y * m[1].x + v.z * m[2].x,
+ v.x * m[0].y + v.y * m[1].y + v.z * m[2].y,
+ v.x * m[0].z + v.y * m[1].z + v.z * m[2].z
+ );
}
mat3 __operator * (const mat3 m, const mat3 n) {
- mat3 o;
- o[0] = m * n[0];
- o[1] = m * n[1];
- o[2] = m * n[2];
- return o;
+ return mat3 (m * n[0], m * n[1], m * n[2]);
}
void __operator *= (inout mat3 m, const mat3 n) {
@@ -624,21 +549,16 @@ void __operator -= (inout mat4 m, const mat4 n) {
}
vec4 __operator * (const mat4 m, const vec4 v) {
- vec4 u;
- u.x = v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x;
- u.y = v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y;
- u.z = v.x * m[0].z + v.y * m[1].z + v.z * m[2].z + v.w * m[3].z;
- u.w = v.x * m[0].w + v.y * m[1].w + v.z * m[2].w + v.w * m[3].w;
- return u;
+ return vec4 (
+ v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x,
+ v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y,
+ v.x * m[0].z + v.y * m[1].z + v.z * m[2].z + v.w * m[3].z,
+ v.x * m[0].w + v.y * m[1].w + v.z * m[2].w + v.w * m[3].w
+ );
}
mat4 __operator * (const mat4 m, const mat4 n) {
- mat4 o;
- o[0] = m * n[0];
- o[1] = m * n[1];
- o[2] = m * n[2];
- o[3] = m * n[3];
- return o;
+ return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);
}
void __operator *= (inout mat4 m, const mat4 n) {
@@ -797,10 +717,10 @@ void __operator /= (inout mat4 m, const float a) {
}
vec2 __operator * (const vec2 v, const mat2 m) {
- vec2 u;
- u.x = v.x * m[0].x + v.y * m[0].y;
- u.y = v.x * m[1].x + v.y * m[1].y;
- return u;
+ return vec2 (
+ v.x * m[0].x + v.y * m[0].y,
+ v.x * m[1].x + v.y * m[1].y
+ );
}
void __operator *= (inout vec2 v, const mat2 m) {
@@ -808,11 +728,11 @@ void __operator *= (inout vec2 v, const mat2 m) {
}
vec3 __operator * (const vec3 v, const mat3 m) {
- vec3 u;
- u.x = v.x * m[0].x + v.y * m[0].y + v.z * m[0].z;
- u.y = v.x * m[1].x + v.y * m[1].y + v.z * m[1].z;
- u.z = v.x * m[2].x + v.y * m[2].y + v.z * m[2].z;
- return u;
+ return vec3 (
+ v.x * m[0].x + v.y * m[0].y + v.z * m[0].z,
+ v.x * m[1].x + v.y * m[1].y + v.z * m[1].z,
+ v.x * m[2].x + v.y * m[2].y + v.z * m[2].z
+ );
}
void __operator *= (inout vec3 v, const mat3 m) {
@@ -820,12 +740,12 @@ void __operator *= (inout vec3 v, const mat3 m) {
}
vec4 __operator * (const vec4 v, const mat4 m) {
- vec4 u;
- u.x = v.x * m[0].x + v.y * m[0].y + v.z * m[0].z + v.w * m[0].w;
- u.y = v.x * m[1].x + v.y * m[1].y + v.z * m[1].z + v.w * m[1].w;
- u.z = v.x * m[2].x + v.y * m[2].y + v.z * m[2].z + v.w * m[2].w;
- u.w = v.x * m[3].x + v.y * m[3].y + v.z * m[3].z + v.w * m[3].w;
- return u;
+ return vec4 (
+ v.x * m[0].x + v.y * m[0].y + v.z * m[0].z + v.w * m[0].w,
+ v.x * m[1].x + v.y * m[1].y + v.z * m[1].z + v.w * m[1].w,
+ v.x * m[2].x + v.y * m[2].y + v.z * m[2].z + v.w * m[2].w,
+ v.x * m[3].x + v.y * m[3].y + v.z * m[3].z + v.w * m[3].w
+ );
}
void __operator *= (inout vec4 v, const mat4 m) {
@@ -881,651 +801,327 @@ int __operator / (const int a, const int b) {
}
vec2 __operator + (const vec2 v, const vec2 u) {
- vec2 t;
- t.x = v.x + u.x;
- t.y = v.y + u.y;
- return t;
+ return vec2 (v.x + u.x, v.y + u.y);
}
vec2 __operator - (const vec2 v, const vec2 u) {
- vec2 t;
- t.x = v.x - u.x;
- t.y = v.y - u.y;
- return t;
+ return vec2 (v.x - u.x, v.y - u.y);
}
vec2 __operator * (const vec2 v, const vec2 u) {
- vec2 t;
- t.x = v.x * u.x;
- t.y = v.y * u.y;
- return t;
+ return vec2 (v.x * u.x, v.y * u.y);
}
vec2 __operator / (const vec2 v, const vec2 u) {
- vec2 t;
- t.x = v.x / u.x;
- t.y = v.y / u.y;
- return t;
+ return vec2 (v.x / u.x, v.y / u.y);
}
vec3 __operator + (const vec3 v, const vec3 u) {
- vec3 t;
- t.x = v.x + u.x;
- t.y = v.y + u.y;
- t.z = v.z + u.z;
- return t;
+ return vec3 (v.x + u.x, v.y + u.y, v.z + u.z);
}
vec3 __operator - (const vec3 v, const vec3 u) {
- vec3 t;
- t.x = v.x - u.x;
- t.y = v.y - u.y;
- t.z = v.z - u.z;
- return t;
+ return vec3 (v.x - u.x, v.y - u.y, v.z - u.z);
}
vec3 __operator * (const vec3 v, const vec3 u) {
- vec3 t;
- t.x = v.x * u.x;
- t.y = v.y * u.y;
- t.z = v.z * u.z;
- return t;
+ return vec3 (v.x * u.x, v.y * u.y, v.z * u.z);
}
vec3 __operator / (const vec3 v, const vec3 u) {
- vec3 t;
- t.x = v.x / u.x;
- t.y = v.y / u.y;
- t.z = v.z / u.z;
- return t;
+ return vec3 (v.x / u.x, v.y / u.y, v.z / u.z);
}
vec4 __operator + (const vec4 v, const vec4 u) {
- vec4 t;
- t.x = v.x + u.x;
- t.y = v.y + u.y;
- t.z = v.z + u.z;
- t.w = v.w + u.w;
- return t;
+ return vec4 (v.x + u.x, v.y + u.y, v.z + u.z, v.w + u.w);
}
vec4 __operator - (const vec4 v, const vec4 u) {
- vec4 t;
- t.x = v.x - u.x;
- t.y = v.y - u.y;
- t.z = v.z - u.z;
- t.w = v.w - u.w;
- return t;
+ return vec4 (v.x - u.x, v.y - u.y, v.z - u.z, v.w - u.w);
}
vec4 __operator * (const vec4 v, const vec4 u) {
- vec4 t;
- t.x = v.x * u.x;
- t.y = v.y * u.y;
- t.z = v.z * u.z;
- t.w = v.w * u.w;
- return t;
+ return vec4 (v.x * u.x, v.y * u.y, v.z * u.z, v.w * u.w);
}
vec4 __operator / (const vec4 v, const vec4 u) {
- vec4 t;
- t.x = v.x / u.x;
- t.y = v.y / u.y;
- t.z = v.z / u.z;
- t.w = v.w / u.w;
- return t;
+ return vec4 (v.x / u.x, v.y / u.y, v.z / u.z, v.w / u.w);
}
ivec2 __operator + (const ivec2 v, const ivec2 u) {
- ivec2 t;
- t.x = v.x + u.x;
- t.y = v.y + u.y;
- return t;
+ return ivec2 (v.x + u.x, v.y + u.y);
}
ivec2 __operator - (const ivec2 v, const ivec2 u) {
- ivec2 t;
- t.x = v.x - u.x;
- t.y = v.y - u.y;
- return t;
+ return ivec2 (v.x - u.x, v.y - u.y);
}
ivec2 __operator * (const ivec2 v, const ivec2 u) {
- ivec2 t;
- t.x = v.x * u.x;
- t.y = v.y * u.y;
- return t;
+ return ivec2 (v.x * u.x, v.y * u.y);
}
ivec2 __operator / (const ivec2 v, const ivec2 u) {
- ivec2 t;
- t.x = v.x / u.x;
- t.y = v.y / u.y;
- return t;
+ return ivec2 (v.x / u.x, v.y / u.y);
}
ivec3 __operator + (const ivec3 v, const ivec3 u) {
- ivec3 t;
- t.x = v.x + u.x;
- t.y = v.y + u.y;
- t.z = v.z + u.z;
- return t;
+ return ivec3 (v.x + u.x, v.y + u.y, v.z + u.z);
}
ivec3 __operator - (const ivec3 v, const ivec3 u) {
- ivec3 t;
- t.x = v.x - u.x;
- t.y = v.y - u.y;
- t.z = v.z - u.z;
- return t;
+ return ivec3 (v.x - u.x, v.y - u.y, v.z - u.z);
}
ivec3 __operator * (const ivec3 v, const ivec3 u) {
- ivec3 t;
- t.x = v.x * u.x;
- t.y = v.y * u.y;
- t.z = v.z * u.z;
- return t;
+ return ivec3 (v.x * u.x, v.y * u.y, v.z * u.z);
}
ivec3 __operator / (const ivec3 v, const ivec3 u) {
- ivec3 t;
- t.x = v.x / u.x;
- t.y = v.y / u.y;
- t.z = v.z / u.z;
- return t;
+ return ivec3 (v.x / u.x, v.y / u.y, v.z / u.z);
}
ivec4 __operator + (const ivec4 v, const ivec4 u) {
- ivec4 t;
- t.x = v.x + u.x;
- t.y = v.y + u.y;
- t.z = v.z + u.z;
- t.w = v.w + u.w;
- return t;
+ return ivec4 (v.x + u.x, v.y + u.y, v.z + u.z, v.w + u.w);
}
ivec4 __operator - (const ivec4 v, const ivec4 u) {
- ivec4 t;
- t.x = v.x - u.x;
- t.y = v.y - u.y;
- t.z = v.z - u.z;
- t.w = v.w - u.w;
- return t;
+ return ivec4 (v.x - u.x, v.y - u.y, v.z - u.z, v.w - u.w);
}
ivec4 __operator * (const ivec4 v, const ivec4 u) {
- ivec4 t;
- t.x = v.x * u.x;
- t.y = v.y * u.y;
- t.z = v.z * u.z;
- t.w = v.w * u.w;
- return t;
+ return ivec4 (v.x * u.x, v.y * u.y, v.z * u.z, v.w * u.w);
}
ivec4 __operator / (const ivec4 v, const ivec4 u) {
- ivec4 t;
- t.x = v.x / u.x;
- t.y = v.y / u.y;
- t.z = v.z / u.z;
- t.w = v.w / u.w;
- return t;
+ return ivec4 (v.x / u.x, v.y / u.y, v.z / u.z, v.w / u.w);
}
mat2 __operator + (const mat2 m, const mat2 n) {
- mat2 o;
- o[0] = m[0] + n[0];
- o[1] = m[1] + n[1];
- return o;
+ return mat2 (m[0] + n[0], m[1] + n[1]);
}
mat2 __operator - (const mat2 m, const mat2 n) {
- mat2 o;
- o[0] = m[0] - n[0];
- o[1] = m[1] - n[1];
- return o;
+ return mat2 (m[0] - n[0], m[1] - n[1]);
}
mat2 __operator / (const mat2 m, const mat2 n) {
- mat2 o;
- o[0] = m[0] / n[0];
- o[1] = m[1] / n[1];
- return o;
+ return mat2 (m[0] / n[0], m[1] / n[1]);
}
mat3 __operator + (const mat3 m, const mat3 n) {
- mat3 o;
- o[0] = m[0] + n[0];
- o[1] = m[1] + n[1];
- o[2] = m[2] + n[2];
- return o;
+ return mat3 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);
}
mat3 __operator - (const mat3 m, const mat3 n) {
- mat3 o;
- o[0] = m[0] - n[0];
- o[1] = m[1] - n[1];
- o[2] = m[2] - n[2];
- return o;
+ return mat3 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);
}
mat3 __operator / (const mat3 m, const mat3 n) {
- mat3 o;
- o[0] = m[0] / n[0];
- o[1] = m[1] / n[1];
- o[2] = m[2] / n[2];
- return o;
+ return mat3 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);
}
mat4 __operator + (const mat4 m, const mat4 n) {
- mat4 o;
- o[0] = m[0] + n[0];
- o[1] = m[1] + n[1];
- o[2] = m[2] + n[2];
- o[3] = m[3] + n[3];
- return o;
+ return mat4 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);
}
mat4 __operator - (const mat4 m, const mat4 n) {
- mat4 o;
- o[0] = m[0] - n[0];
- o[1] = m[1] - n[1];
- o[2] = m[2] - n[2];
- o[3] = m[3] - n[3];
- return o;
+ return mat4 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);
}
mat4 __operator / (const mat4 m, const mat4 n) {
- mat4 o;
- o[0] = m[0] / n[0];
- o[1] = m[1] / n[1];
- o[2] = m[2] / n[2];
- o[3] = m[3] / n[3];
- return o;
+ return mat4 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);
}
vec2 __operator + (const float a, const vec2 u) {
- vec2 t;
- t.x = a + u.x;
- t.y = a + u.y;
- return t;
+ return vec2 (a + u.x, a + u.y);
}
vec2 __operator + (const vec2 v, const float b) {
- vec2 t;
- t.x = v.x + b;
- t.y = v.y + b;
- return t;
+ return vec2 (v.x + b, v.y + b);
}
vec2 __operator - (const float a, const vec2 u) {
- vec2 t;
- t.x = a - u.x;
- t.y = a - u.y;
- return t;
+ return vec2 (a - u.x, a - u.y);
}
vec2 __operator - (const vec2 v, const float b) {
- vec2 t;
- t.x = v.x - b;
- t.y = v.y - b;
- return t;
+ return vec2 (v.x - b, v.y - b);
}
vec2 __operator * (const float a, const vec2 u) {
- vec2 t;
- t.x = a * u.x;
- t.y = a * u.y;
- return t;
+ return vec2 (a * u.x, a * u.y);
}
vec2 __operator * (const vec2 v, const float b) {
- vec2 t;
- t.x = v.x * b;
- t.y = v.y * b;
- return t;
+ return vec2 (v.x * b, v.y * b);
}
vec2 __operator / (const float a, const vec2 u) {
- vec2 t;
- t.x = a / u.x;
- t.y = a / u.y;
- return t;
+ return vec2 (a / u.x, a / u.y);
}
vec2 __operator / (const vec2 v, const float b) {
- vec2 t;
- t.x = v.x / b;
- t.y = v.y / b;
- return t;
+ return vec2 (v.x / b, v.y / b);
}
vec3 __operator + (const float a, const vec3 u) {
- vec3 t;
- t.x = a + u.x;
- t.y = a + u.y;
- t.z = a + u.z;
- return t;
+ return vec3 (a + u.x, a + u.y, a + u.z);
}
vec3 __operator + (const vec3 v, const float b) {
- vec3 t;
- t.x = v.x + b;
- t.y = v.y + b;
- t.z = v.z + b;
- return t;
+ return vec3 (v.x + b, v.y + b, v.z + b);
}
vec3 __operator - (const float a, const vec3 u) {
- vec3 t;
- t.x = a - u.x;
- t.y = a - u.y;
- t.z = a - u.z;
- return t;
+ return vec3 (a - u.x, a - u.y, a - u.z);
}
vec3 __operator - (const vec3 v, const float b) {
- vec3 t;
- t.x = v.x - b;
- t.y = v.y - b;
- t.z = v.z - b;
- return t;
+ return vec3 (v.x - b, v.y - b, v.z - b);
}
vec3 __operator * (const float a, const vec3 u) {
- vec3 t;
- t.x = a * u.x;
- t.y = a * u.y;
- t.z = a * u.z;
- return t;
+ return vec3 (a * u.x, a * u.y, a * u.z);
}
vec3 __operator * (const vec3 v, const float b) {
- vec3 t;
- t.x = v.x * b;
- t.y = v.y * b;
- t.z = v.z * b;
- return t;
+ return vec3 (v.x * b, v.y * b, v.z * b);
}
vec3 __operator / (const float a, const vec3 u) {
- vec3 t;
- t.x = a / u.x;
- t.y = a / u.y;
- t.z = a / u.z;
- return t;
+ return vec3 (a / u.x, a / u.y, a / u.z);
}
vec3 __operator / (const vec3 v, const float b) {
- vec3 t;
- t.x = v.x / b;
- t.y = v.y / b;
- t.z = v.z / b;
- return t;
+ return vec3 (v.x / b, v.y / b, v.z / b);
}
vec4 __operator + (const float a, const vec4 u) {
- vec4 t;
- t.x = a + u.x;
- t.y = a + u.y;
- t.z = a + u.z;
- t.w = a + u.w;
- return t;
+ return vec4 (a + u.x, a + u.y, a + u.z, a + u.w);
}
vec4 __operator + (const vec4 v, const float b) {
- vec4 t;
- t.x = v.x + b;
- t.y = v.y + b;
- t.z = v.z + b;
- t.w = v.w + b;
- return t;
+ return vec4 (v.x + b, v.y + b, v.z + b, v.w + b);
}
vec4 __operator - (const float a, const vec4 u) {
- vec4 t;
- t.x = a - u.x;
- t.y = a - u.y;
- t.z = a - u.z;
- t.w = a - u.w;
- return t;
+ return vec4 (a - u.x, a - u.y, a - u.z, a - u.w);
}
vec4 __operator - (const vec4 v, const float b) {
- vec4 t;
- t.x = v.x - b;
- t.y = v.y - b;
- t.z = v.z - b;
- t.w = v.w - b;
- return t;
+ return vec4 (v.x - b, v.y - b, v.z - b, v.w - b);
}
vec4 __operator * (const float a, const vec4 u) {
- vec4 t;
- t.x = a * u.x;
- t.y = a * u.y;
- t.z = a * u.z;
- t.w = a * u.w;
- return t;
+ return vec4 (a * u.x, a * u.y, a * u.z, a * u.w);
}
vec4 __operator * (const vec4 v, const float b) {
- vec4 t;
- t.x = v.x * b;
- t.y = v.y * b;
- t.z = v.z * b;
- t.w = v.w * b;
- return t;
+ return vec4 (v.x * b, v.y * b, v.z * b, v.w * b);
}
vec4 __operator / (const float a, const vec4 u) {
- vec4 t;
- t.x = a / u.x;
- t.y = a / u.y;
- t.z = a / u.z;
- t.w = a / u.w;
- return t;
+ return vec4 (a / u.x, a / u.y, a / u.z, a / u.w);
}
vec4 __operator / (const vec4 v, const float b) {
- vec4 t;
- t.x = v.x / b;
- t.y = v.y / b;
- t.z = v.z / b;
- t.w = v.w / b;
- return t;
+ return vec4 (v.x / b, v.y / b, v.z / b, v.w / b);
}
mat2 __operator + (const float a, const mat2 n) {
- mat2 o;
- o[0] = a + n[0];
- o[1] = a + n[1];
- return o;
+ return mat2 (a + n[0], a + n[1]);
}
mat2 __operator + (const mat2 m, const float b) {
- mat2 o;
- o[0] = m[0] + b;
- o[1] = m[1] + b;
- return o;
+ return mat2 (m[0] + b, m[1] + b);
}
mat2 __operator - (const float a, const mat2 n) {
- mat2 o;
- o[0] = a - n[0];
- o[1] = a - n[1];
- return o;
+ return mat2 (a - n[0], a - n[1]);
}
mat2 __operator - (const mat2 m, const float b) {
- mat2 o;
- o[0] = m[0] - b;
- o[1] = m[1] - b;
- return o;
+ return mat2 (m[0] - b, m[1] - b);
}
mat2 __operator * (const float a, const mat2 n) {
- mat2 o;
- o[0] = a * n[0];
- o[1] = a * n[1];
- return o;
+ return mat2 (a * n[0], a * n[1]);
}
mat2 __operator * (const mat2 m, const float b) {
- mat2 o;
- o[0] = m[0] * b;
- o[1] = m[1] * b;
- return o;
+ return mat2 (m[0] * b, m[1] * b);
}
mat2 __operator / (const float a, const mat2 n) {
- mat2 o;
- o[0] = a / n[0];
- o[1] = a / n[1];
- return o;
+ return mat2 (a / n[0], a / n[1]);
}
mat2 __operator / (const mat2 m, const float b) {
- mat2 o;
- o[0] = m[0] / b;
- o[1] = m[1] / b;
- return o;
+ return mat2 (m[0] / b, m[1] / b);
}
mat3 __operator + (const float a, const mat3 n) {
- mat3 o;
- o[0] = a + n[0];
- o[1] = a + n[1];
- o[2] = a + n[2];
- return o;
+ return mat3 (a + n[0], a + n[1], a + n[2]);
}
mat3 __operator + (const mat3 m, const float b) {
- mat3 o;
- o[0] = m[0] + b;
- o[1] = m[1] + b;
- o[2] = m[2] + b;
- return o;
+ return mat3 (m[0] + b, m[1] + b, m[2] + b);
}
mat3 __operator - (const float a, const mat3 n) {
- mat3 o;
- o[0] = a - n[0];
- o[1] = a - n[1];
- o[2] = a - n[2];
- return o;
+ return mat3 (a - n[0], a - n[1], a - n[2]);
}
mat3 __operator - (const mat3 m, const float b) {
- mat3 o;
- o[0] = m[0] - b;
- o[1] = m[1] - b;
- o[2] = m[2] - b;
- return o;
+ return mat3 (m[0] - b, m[1] - b, m[2] - b);
}
mat3 __operator * (const float a, const mat3 n) {
- mat3 o;
- o[0] = a * n[0];
- o[1] = a * n[1];
- o[2] = a * n[2];
- return o;
+ return mat3 (a * n[0], a * n[1], a * n[2]);
}
mat3 __operator * (const mat3 m, const float b) {
- mat3 o;
- o[0] = m[0] * b;
- o[1] = m[1] * b;
- o[2] = m[2] * b;
- return o;
+ return mat3 (m[0] * b, m[1] * b, m[2] * b);
}
mat3 __operator / (const float a, const mat3 n) {
- mat3 o;
- o[0] = a / n[0];
- o[1] = a / n[1];
- o[2] = a / n[2];
- return o;
+ return mat3 (a / n[0], a / n[1], a / n[2]);
}
mat3 __operator / (const mat3 m, const float b) {
- mat3 o;
- o[0] = m[0] / b;
- o[1] = m[1] / b;
- o[2] = m[2] / b;
- return o;
+ return mat3 (m[0] / b, m[1] / b, m[2] / b);
}
mat4 __operator + (const float a, const mat4 n) {
- mat4 o;
- o[0] = a + n[0];
- o[1] = a + n[1];
- o[2] = a + n[2];
- o[3] = a + n[3];
- return o;
+ return mat4 (a + n[0], a + n[1], a + n[2], a + n[3]);
}
mat4 __operator + (const mat4 m, const float b) {
- mat4 o;
- o[0] = m[0] + b;
- o[1] = m[1] + b;
- o[2] = m[2] + b;
- o[3] = m[3] + b;
- return o;
+ return mat4 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);
}
mat4 __operator - (const float a, const mat4 n) {
- mat4 o;
- o[0] = a - n[0];
- o[1] = a - n[1];
- o[2] = a - n[2];
- o[3] = a - n[3];
- return o;
+ return mat4 (a - n[0], a - n[1], a - n[2], a - n[3]);
}
mat4 __operator - (const mat4 m, const float b) {
- mat4 o;
- o[0] = m[0] - b;
- o[1] = m[1] - b;
- o[2] = m[2] - b;
- o[3] = m[3] - b;
- return o;
+ return mat4 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);
}
mat4 __operator * (const float a, const mat4 n) {
- mat4 o;
- o[0] = a * n[0];
- o[1] = a * n[1];
- o[2] = a * n[2];
- o[3] = a * n[3];
- return o;
+ return mat4 (a * n[0], a * n[1], a * n[2], a * n[3]);
}
mat4 __operator * (const mat4 m, const float b) {
- mat4 o;
- o[0] = m[0] * b;
- o[1] = m[1] * b;
- o[2] = m[2] * b;
- o[3] = m[3] * b;
- return o;
+ return mat4 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);
}
mat4 __operator / (const float a, const mat4 n) {
- mat4 o;
- o[0] = a / n[0];
- o[1] = a / n[1];
- o[2] = a / n[2];
- o[3] = a / n[3];
- return o;
+ return mat4 (a / n[0], a / n[1], a / n[2], a / n[3]);
}
mat4 __operator / (const mat4 m, const float b) {
- mat4 o;
- o[0] = m[0] / b;
- o[1] = m[1] / b;
- o[2] = m[2] / b;
- o[3] = m[3] / b;
- return o;
+ return mat4 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);
}
ivec2 __operator + (const int a, const ivec2 u) {
@@ -1625,75 +1221,39 @@ ivec4 __operator / (const ivec4 v, const int b) {
}
vec2 __operator - (const vec2 v) {
- vec2 u;
- u.x = -v.x;
- u.y = -v.y;
- return u;
+ return vec2 (-v.x, -v.y);
}
vec3 __operator - (const vec3 v) {
- vec3 u;
- u.x = -v.x;
- u.y = -v.y;
- u.z = -v.z;
- return u;
+ return vec3 (-v.x, -v.y, -v.z);
}
vec4 __operator - (const vec4 v) {
- vec4 u;
- u.x = -v.x;
- u.y = -v.y;
- u.z = -v.z;
- u.w = -v.w;
- return u;
+ return vec4 (-v.x, -v.y, -v.z, -v.w);
}
ivec2 __operator - (const ivec2 v) {
- ivec2 u;
- u.x = -v.x;
- u.y = -v.y;
- return u;
+ return ivec2 (-v.x, -v.y);
}
ivec3 __operator - (const ivec3 v) {
- ivec3 u;
- u.x = -v.x;
- u.y = -v.y;
- u.z = -v.z;
- return u;
+ return ivec3 (-v.x, -v.y, -v.z);
}
ivec4 __operator - (const ivec4 v) {
- ivec4 u;
- u.x = -v.x;
- u.y = -v.y;
- u.z = -v.z;
- u.w = -v.w;
- return u;
+ return ivec4 (-v.x, -v.y, -v.z, -v.w);
}
mat2 __operator - (const mat2 m) {
- mat2 n;
- n[0] = -m[0];
- n[1] = -m[1];
- return n;
+ return mat2 (-m[0], -m[1]);
}
mat3 __operator - (const mat3 m) {
- mat3 n;
- n[0] = -m[0];
- n[1] = -m[1];
- n[2] = -m[2];
- return n;
+ return mat3 (-m[0], -m[1], -m[2]);
}
mat4 __operator - (const mat4 m) {
- mat4 n;
- n[0] = -m[0];
- n[1] = -m[1];
- n[2] = -m[2];
- n[3] = -m[3];
- return n;
+ return mat4 (-m[0], -m[1], -m[2], -m[3]);
}
void __operator -- (inout float a) {
@@ -1840,84 +1400,39 @@ int __operator -- (inout int a, const int) {
}
vec2 __operator -- (inout vec2 v, const int) {
- vec2 u;
- u = v;
- --v.x;
- --v.y;
- return u;
+ return vec2 (v.x--, v.y--);
}
vec3 __operator -- (inout vec3 v, const int) {
- vec3 u;
- u = v;
- --v.x;
- --v.y;
- --v.z;
- return u;
+ return vec3 (v.x--, v.y--, v.z--);
}
vec4 __operator -- (inout vec4 v, const int) {
- vec4 u;
- u = v;
- --v.x;
- --v.y;
- --v.z;
- --v.w;
- return u;
+ return vec4 (v.x--, v.y--, v.z--, v.w--);
}
ivec2 __operator -- (inout ivec2 v, const int) {
- ivec2 u;
- u = v;
- --v.x;
- --v.y;
- return u;
+ return ivec2 (v.x--, v.y--);
}
ivec3 __operator -- (inout ivec3 v, const int) {
- ivec3 u;
- u = v;
- --v.x;
- --v.y;
- --v.z;
- return u;
+ return ivec3 (v.x--, v.y--, v.z--);
}
ivec4 __operator -- (inout ivec4 v, const int) {
- ivec4 u;
- u = v;
- --v.x;
- --v.y;
- --v.z;
- --v.w;
- return u;
+ return ivec4 (v.x--, v.y--, v.z--, v.w--);
}
mat2 __operator -- (inout mat2 m, const int) {
- mat2 n;
- n = m;
- --m[0];
- --m[1];
- return n;
+ return mat2 (m[0]--, m[1]--);
}
mat3 __operator -- (inout mat3 m, const int) {
- mat3 n;
- n = m;
- --m[0];
- --m[1];
- --m[2];
- return n;
+ return mat3 (m[0]--, m[1]--, m[2]--);
}
mat4 __operator -- (inout mat4 m, const int) {
- mat4 n;
- n = m;
- --m[0];
- --m[1];
- --m[2];
- --m[3];
- return n;
+ return mat4 (m[0]--, m[1]--, m[2]--, m[3]--);
}
float __operator ++ (inout float a, const int) {
@@ -1935,84 +1450,39 @@ int __operator ++ (inout int a, const int) {
}
vec2 __operator ++ (inout vec2 v, const int) {
- vec2 u;
- u = v;
- ++v.x;
- ++v.y;
- return u;
+ return vec2 (v.x++, v.y++);
}
vec3 __operator ++ (inout vec3 v, const int) {
- vec3 u;
- u = v;
- ++v.x;
- ++v.y;
- ++v.z;
- return u;
+ return vec3 (v.x++, v.y++, v.z++);
}
vec4 __operator ++ (inout vec4 v, const int) {
- vec4 u;
- u = v;
- ++v.x;
- ++v.y;
- ++v.z;
- ++v.w;
- return u;
+ return vec4 (v.x++, v.y++, v.z++, v.w++);
}
ivec2 __operator ++ (inout ivec2 v, const int) {
- ivec2 u;
- u = v;
- ++v.x;
- ++v.y;
- return u;
+ return ivec2 (v.x++, v.y++);
}
ivec3 __operator ++ (inout ivec3 v, const int) {
- ivec3 u;
- u = v;
- ++v.x;
- ++v.y;
- ++v.z;
- return u;
+ return ivec3 (v.x++, v.y++, v.z++);
}
ivec4 __operator ++ (inout ivec4 v, const int) {
- ivec4 u;
- u = v;
- ++v.x;
- ++v.y;
- ++v.z;
- ++v.w;
- return u;
+ return ivec4 (v.x++, v.y++, v.z++, v.w++);
}
mat2 __operator ++ (inout mat2 m, const int) {
- mat2 n;
- n = m;
- --m[0];
- --m[1];
- return n;
+ return mat2 (m[0]++, m[1]++);
}
mat3 __operator ++ (inout mat3 m, const int) {
- mat3 n;
- n = m;
- --m[0];
- --m[1];
- --m[2];
- return n;
+ return mat3 (m[0]++, m[1]++, m[2]++);
}
mat4 __operator ++ (inout mat4 m, const int) {
- mat4 n;
- n = m;
- --m[0];
- --m[1];
- --m[2];
- --m[3];
- return n;
+ return mat4 (m[0]++, m[1]++, m[2]++, m[3]++);
}
bool __operator < (const float a, const float b) {
diff --git a/src/mesa/shader/slang/library/slang_core_gc.h b/src/mesa/shader/slang/library/slang_core_gc.h
index 9ba155a58f6..8688a229daf 100644
--- a/src/mesa/shader/slang/library/slang_core_gc.h
+++ b/src/mesa/shader/slang/library/slang_core_gc.h
@@ -9,639 +9,530 @@
1,0,9,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,102,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,
18,102,0,0,18,105,0,0,0,8,18,102,0,0,0,1,0,1,1,1,1,0,1,98,0,0,0,1,8,18,98,0,0,0,1,0,5,1,1,1,0,5,
105,0,0,0,1,8,18,105,0,0,0,1,0,9,1,1,1,0,9,102,0,0,0,1,8,18,102,0,0,0,1,0,10,1,1,1,0,9,102,0,0,0,1,
-3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,18,102,0,20,0,9,18,117,0,59,121,0,18,102,0,20,0,8,18,117,
-0,0,0,1,0,10,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,
-116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,50,0,18,120,0,0,0,0,0,1,0,10,1,1,1,0,1,98,0,0,0,1,8,
-58,118,101,99,50,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,11,1,1,1,0,9,102,0,0,0,1,3,
-2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,18,102,0,20,0,9,18,117,0,59,121,0,18,102,0,20,0,9,18,117,0,
-59,122,0,18,102,0,20,0,8,18,117,0,0,0,1,0,11,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,
-116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,51,0,18,120,0,0,0,0,
-0,1,0,11,1,1,1,0,1,98,0,0,0,1,8,58,118,101,99,51,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,
-0,1,0,12,1,1,1,0,9,102,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,18,102,0,20,0,9,18,117,0,
-59,121,0,18,102,0,20,0,9,18,117,0,59,122,0,18,102,0,20,0,9,18,117,0,59,119,0,18,102,0,20,0,8,18,
-117,0,0,0,1,0,12,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,
-97,116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,52,0,18,120,0,0,0,0,0,1,0,12,1,1,1,0,1,98,0,0,0,1,
-8,58,118,101,99,52,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,6,1,1,1,0,5,105,0,0,0,1,
-3,2,0,6,1,117,0,0,0,9,18,117,0,59,120,0,18,105,0,20,0,9,18,117,0,59,121,0,18,105,0,20,0,8,18,117,0,
-0,0,1,0,6,1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,99,50,0,58,105,110,116,0,18,102,0,0,0,0,0,0,0,1,0,
-6,1,1,1,0,1,98,0,0,0,1,8,58,105,118,101,99,50,0,58,105,110,116,0,18,98,0,0,0,0,0,0,0,1,0,7,1,1,1,0,
-5,105,0,0,0,1,3,2,0,7,1,117,0,0,0,9,18,117,0,59,120,0,18,105,0,20,0,9,18,117,0,59,121,0,18,105,0,
-20,0,9,18,117,0,59,122,0,18,105,0,20,0,8,18,117,0,0,0,1,0,7,1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,
-99,51,0,58,105,110,116,0,18,102,0,0,0,0,0,0,0,1,0,7,1,1,1,0,1,98,0,0,0,1,8,58,105,118,101,99,51,0,
-58,105,110,116,0,18,98,0,0,0,0,0,0,0,1,0,8,1,1,1,0,5,105,0,0,0,1,3,2,0,8,1,117,0,0,0,9,18,117,0,59,
-120,0,18,105,0,20,0,9,18,117,0,59,121,0,18,105,0,20,0,9,18,117,0,59,122,0,18,105,0,20,0,9,18,117,0,
-59,119,0,18,105,0,20,0,8,18,117,0,0,0,1,0,8,1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,99,52,0,58,105,
-110,116,0,18,102,0,0,0,0,0,0,0,1,0,8,1,1,1,0,1,98,0,0,0,1,8,58,105,118,101,99,52,0,58,105,110,116,
-0,18,98,0,0,0,0,0,0,0,1,0,2,1,1,1,0,1,98,0,0,0,1,3,2,0,2,1,117,0,0,0,9,18,117,0,59,120,0,18,98,0,
-20,0,9,18,117,0,59,121,0,18,98,0,20,0,8,18,117,0,0,0,1,0,2,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,
-99,50,0,58,98,111,111,108,0,18,102,0,0,0,0,0,0,0,1,0,2,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,50,
-0,58,98,111,111,108,0,18,105,0,0,0,0,0,0,0,1,0,3,1,1,1,0,1,98,0,0,0,1,3,2,0,3,1,117,0,0,0,9,18,117,
-0,59,120,0,18,98,0,20,0,9,18,117,0,59,121,0,18,98,0,20,0,9,18,117,0,59,122,0,18,98,0,20,0,8,18,117,
-0,0,0,1,0,3,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,51,0,58,98,111,111,108,0,18,102,0,0,0,0,0,0,0,
-1,0,3,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,51,0,58,98,111,111,108,0,18,105,0,0,0,0,0,0,0,1,0,4,
-1,1,1,0,1,98,0,0,0,1,3,2,0,4,1,117,0,0,0,9,18,117,0,59,120,0,18,98,0,20,0,9,18,117,0,59,121,0,18,
-98,0,20,0,9,18,117,0,59,122,0,18,98,0,20,0,9,18,117,0,59,119,0,18,98,0,20,0,8,18,117,0,0,0,1,0,4,1,
-1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,52,0,58,98,111,111,108,0,18,102,0,0,0,0,0,0,0,1,0,4,1,1,1,0,
-5,105,0,0,0,1,8,58,98,118,101,99,52,0,58,98,111,111,108,0,18,105,0,0,0,0,0,0,0,1,0,13,1,1,1,0,9,
-102,0,0,0,1,3,2,0,13,1,109,0,0,0,9,18,109,0,16,8,48,0,57,59,120,0,18,102,0,20,0,9,18,109,0,16,8,48,
-0,57,59,121,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,
-16,10,49,0,57,59,121,0,18,102,0,20,0,8,18,109,0,0,0,1,0,13,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,
-0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,50,0,18,
-120,0,0,0,0,0,1,0,13,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,50,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,
-0,31,0,0,0,0,1,0,14,1,1,1,0,9,102,0,0,0,1,3,2,0,14,1,109,0,0,0,9,18,109,0,16,8,48,0,57,59,120,0,18,
-102,0,20,0,9,18,109,0,16,8,48,0,57,59,121,0,17,48,0,48,0,0,20,0,9,18,109,0,16,8,48,0,57,59,122,0,
-17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,
-59,121,0,18,102,0,20,0,9,18,109,0,16,10,49,0,57,59,122,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,50,0,
-57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,50,0,57,59,121,0,17,48,0,48,0,0,20,0,9,18,109,0,
-16,10,50,0,57,59,122,0,18,102,0,20,0,8,18,109,0,0,0,1,0,14,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,
-0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,51,0,18,
-120,0,0,0,0,0,1,0,14,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,51,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,
-0,31,0,0,0,0,1,0,15,1,1,1,0,9,102,0,0,0,1,3,2,0,15,1,109,0,0,0,9,18,109,0,16,8,48,0,57,59,120,0,18,
-102,0,20,0,9,18,109,0,16,8,48,0,57,59,121,0,17,48,0,48,0,0,20,0,9,18,109,0,16,8,48,0,57,59,122,0,
-17,48,0,48,0,0,20,0,9,18,109,0,16,8,48,0,57,59,119,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,
-59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,59,121,0,18,102,0,20,0,9,18,109,0,16,10,49,0,
-57,59,122,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,49,0,57,59,119,0,17,48,0,48,0,0,20,0,9,18,109,0,
-16,10,50,0,57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,50,0,57,59,121,0,17,48,0,48,0,0,20,0,9,
-18,109,0,16,10,50,0,57,59,122,0,18,102,0,20,0,9,18,109,0,16,10,50,0,57,59,119,0,17,48,0,48,0,0,20,
-0,9,18,109,0,16,10,51,0,57,59,120,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,51,0,57,59,121,0,17,48,0,
-48,0,0,20,0,9,18,109,0,16,10,51,0,57,59,122,0,17,48,0,48,0,0,20,0,9,18,109,0,16,10,51,0,57,59,119,
-0,18,102,0,20,0,8,18,109,0,0,0,1,0,15,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,
-116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,52,0,18,120,0,0,0,0,0,1,0,
-15,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,52,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,
-0,2,1,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,102,108,111,97,116,95,97,100,100,0,18,97,0,0,18,97,0,0,
-18,98,0,0,0,0,1,0,9,2,27,1,1,0,9,97,0,0,0,1,3,2,0,9,1,98,0,0,0,4,102,108,111,97,116,95,110,101,103,
-97,116,101,0,18,98,0,0,18,97,0,0,0,8,18,98,0,0,0,1,0,0,2,2,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,
-9,1,99,0,0,0,4,102,108,111,97,116,95,110,101,103,97,116,101,0,18,99,0,0,18,98,0,0,0,4,102,108,111,
-97,116,95,97,100,100,0,18,97,0,0,18,97,0,0,18,99,0,0,0,0,1,0,0,2,3,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,
-1,4,102,108,111,97,116,95,109,117,108,116,105,112,108,121,0,18,97,0,0,18,97,0,0,18,98,0,0,0,0,1,0,
-0,2,4,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,102,108,111,97,116,95,100,105,118,105,100,101,0,18,97,0,
-0,18,97,0,0,18,98,0,0,0,0,1,0,9,2,26,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,0,0,0,4,102,
-108,111,97,116,95,97,100,100,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,0,2,1,1,0,2,5,97,
-0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,
-111,97,116,0,18,98,0,0,0,46,0,0,20,0,0,1,0,5,2,27,1,1,0,5,97,0,0,0,1,3,2,0,9,1,120,0,0,0,3,2,0,5,1,
-98,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,102,108,111,97,
-116,95,110,101,103,97,116,101,0,18,120,0,0,18,120,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,
-116,0,18,98,0,0,18,120,0,0,0,8,18,98,0,0,0,1,0,0,2,2,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,
-18,98,0,54,21,0,0,1,0,9,2,21,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,
-116,95,109,117,108,116,105,112,108,121,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,0,2,3,1,
-0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,97,116,0,18,97,0,0,0,58,
-102,108,111,97,116,0,18,98,0,0,0,48,0,0,20,0,0,1,0,9,2,22,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,
-9,1,99,0,0,0,4,102,108,111,97,116,95,100,105,118,105,100,101,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,
-18,99,0,0,0,1,0,0,2,4,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,
-97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,49,0,0,20,0,0,1,0,0,2,1,1,0,2,10,118,0,0,
-1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,
-121,0,21,0,0,1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,
-22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,
-9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,0,1,0,0,2,4,
-1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,
-0,18,117,0,59,121,0,24,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,
-117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,0,59,122,
-0,21,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,
-0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,0,1,0,0,2,
-3,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,
-121,0,18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,0,1,0,0,2,4,1,0,2,11,118,0,
-0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,
-121,0,24,0,9,18,118,0,59,122,0,18,117,0,59,122,0,24,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,12,117,0,
-0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,
-118,0,59,122,0,18,117,0,59,122,0,21,0,9,18,118,0,59,119,0,18,117,0,59,119,0,21,0,0,1,0,0,2,2,1,0,2,
-12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,121,0,18,
-117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,9,18,118,0,59,119,0,18,117,0,59,119,
-0,22,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,
-0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,9,18,118,0,
-59,119,0,18,117,0,59,119,0,23,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,
-120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,122,0,18,117,
-0,59,122,0,24,0,9,18,118,0,59,119,0,18,117,0,59,119,0,24,0,0,1,0,0,2,1,1,0,2,6,118,0,0,1,1,0,6,117,
-0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,0,1,
-0,0,2,2,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,
-59,121,0,18,117,0,59,121,0,22,0,0,1,0,0,2,3,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,0,59,120,
-0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,0,1,0,0,2,4,1,0,2,6,118,0,0,1,
-1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,
-24,0,0,1,0,0,2,1,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,
-18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,0,59,122,0,21,0,0,1,0,0,2,2,1,
-0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,121,0,
-18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,0,1,0,0,2,3,1,0,2,7,118,0,0,1,1,
-0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,
-23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,0,1,0,0,2,4,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,
-18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,
-122,0,18,117,0,59,122,0,24,0,0,1,0,0,2,1,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,
-18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,0,59,
-122,0,21,0,9,18,118,0,59,119,0,18,117,0,59,119,0,21,0,0,1,0,0,2,2,1,0,2,8,118,0,0,1,1,0,8,117,0,0,
-0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,9,18,118,
-0,59,122,0,18,117,0,59,122,0,22,0,9,18,118,0,59,119,0,18,117,0,59,119,0,22,0,0,1,0,0,2,3,1,0,2,8,
-118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,
-0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,9,18,118,0,59,119,0,18,117,0,59,119,0,
-23,0,0,1,0,0,2,4,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,
-18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,122,0,18,117,0,59,122,0,24,0,9,18,118,0,59,
-119,0,18,117,0,59,119,0,24,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,
-0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,21,0,0,1,0,0,2,2,1,
-0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,
-16,10,49,0,57,18,110,0,16,10,49,0,57,22,0,0,1,0,10,2,21,1,1,0,13,109,0,0,1,1,0,10,118,0,0,0,1,3,2,
-0,10,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,
-59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,
-16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,20,0,8,18,117,0,0,
-0,1,0,13,2,21,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,
-18,109,0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,57,18,109,0,18,110,0,16,10,49,0,57,48,
-20,0,8,18,111,0,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,
-48,20,0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,
-0,57,24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,
-14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,
-0,16,10,49,0,57,21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,0,1,0,0,2,2,1,0,2,14,109,
-0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,16,10,49,0,
-57,18,110,0,16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,22,0,0,1,0,11,2,21,
-1,1,0,14,109,0,0,1,1,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,
-18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,18,118,0,
-59,122,0,18,109,0,16,10,50,0,57,59,120,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,
-16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,
-18,109,0,16,10,50,0,57,59,121,0,48,46,20,0,9,18,117,0,59,122,0,18,118,0,59,120,0,18,109,0,16,8,48,
-0,57,59,122,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,122,0,48,46,18,118,0,59,122,0,18,109,
-0,16,10,50,0,57,59,122,0,48,46,20,0,8,18,117,0,0,0,1,0,14,2,21,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,
-1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,
-16,10,49,0,57,18,109,0,18,110,0,16,10,49,0,57,48,20,0,9,18,111,0,16,10,50,0,57,18,109,0,18,110,0,
-16,10,50,0,57,48,20,0,8,18,111,0,0,0,1,0,0,2,3,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,18,
-109,0,18,110,0,48,20,0,0,1,0,0,2,4,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,16,8,48,0,57,
-18,110,0,16,8,48,0,57,24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,
-50,0,57,18,110,0,16,10,50,0,57,24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,
-16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,21,0,9,18,
-109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,21,
-0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,
-22,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,
-50,0,57,22,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,22,0,0,1,0,12,2,21,1,1,0,15,109,0,0,1,
-1,0,12,118,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,
-57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,18,118,0,59,122,0,18,109,0,
-16,10,50,0,57,59,120,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,120,0,48,46,20,0,9,18,117,
-0,59,121,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,10,49,
-0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,121,0,48,46,18,118,0,59,119,0,18,
-109,0,16,10,51,0,57,59,121,0,48,46,20,0,9,18,117,0,59,122,0,18,118,0,59,120,0,18,109,0,16,8,48,0,
-57,59,122,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,122,0,48,46,18,118,0,59,122,0,18,109,0,
-16,10,50,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,122,0,48,46,20,0,9,18,117,
-0,59,119,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,119,0,48,18,118,0,59,121,0,18,109,0,16,10,49,
-0,57,59,119,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,119,0,48,46,18,118,0,59,119,0,18,
-109,0,16,10,51,0,57,59,119,0,48,46,20,0,8,18,117,0,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,1,0,15,110,0,
-0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,
-0,16,10,49,0,57,18,109,0,18,110,0,16,10,49,0,57,48,20,0,9,18,111,0,16,10,50,0,57,18,109,0,18,110,0,
-16,10,50,0,57,48,20,0,9,18,111,0,16,10,51,0,57,18,109,0,18,110,0,16,10,51,0,57,48,20,0,8,18,111,0,
-0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,0,2,
-4,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,18,
-109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,24,
-0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,24,0,0,1,0,0,2,1,1,0,2,10,118,0,0,1,1,0,9,97,0,0,
-0,1,9,18,118,0,59,120,0,18,97,0,21,0,9,18,118,0,59,121,0,18,97,0,21,0,0,1,0,0,2,2,1,0,2,10,118,0,0,
-1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,18,97,0,22,0,0,1,0,0,2,3,1,
-0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,118,0,59,121,0,18,97,0,23,
-0,0,1,0,0,2,4,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,
-121,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,21,
-0,9,18,118,0,59,121,0,18,97,0,21,0,9,18,118,0,59,122,0,18,97,0,21,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,
-1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,18,97,0,22,0,9,18,118,0,59,
-122,0,18,97,0,22,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,
-0,9,18,118,0,59,121,0,18,97,0,23,0,9,18,118,0,59,122,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,11,118,0,0,1,
-1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,
-122,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,21,
-0,9,18,118,0,59,121,0,18,97,0,21,0,9,18,118,0,59,122,0,18,97,0,21,0,9,18,118,0,59,119,0,18,97,0,21,
-0,0,1,0,0,2,2,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,
-121,0,18,97,0,22,0,9,18,118,0,59,122,0,18,97,0,22,0,9,18,118,0,59,119,0,18,97,0,22,0,0,1,0,0,2,3,1,
-0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,118,0,59,121,0,18,97,0,23,
-0,9,18,118,0,59,122,0,18,97,0,23,0,9,18,118,0,59,119,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,
-1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,
-122,0,18,97,0,24,0,9,18,118,0,59,119,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,
-1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,13,
-109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,18,109,0,16,10,49,0,57,18,97,0,
-22,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,
-0,16,10,49,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,
-57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,9,97,0,0,
-0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,
-0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,
-22,0,9,18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,
-14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,0,16,10,49,0,57,18,97,
-0,23,0,9,18,109,0,16,10,50,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,
-109,0,16,8,48,0,57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,0,57,18,
-97,0,24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,
-18,109,0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,0,57,18,97,0,21,0,9,18,109,0,16,10,51,0,57,
-18,97,0,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,
-9,18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,9,18,109,0,16,10,51,0,
-57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,
-0,9,18,109,0,16,10,49,0,57,18,97,0,23,0,9,18,109,0,16,10,50,0,57,18,97,0,23,0,9,18,109,0,16,10,51,
-0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,
-24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,0,57,18,97,0,24,0,9,18,109,0,16,10,
-51,0,57,18,97,0,24,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,13,109,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,
-117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,8,
-48,0,57,59,121,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,16,10,49,0,57,59,120,0,
-48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,20,0,8,18,117,0,0,0,1,0,0,2,3,1,0,2,10,
-118,0,0,1,1,0,13,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,
-1,0,14,109,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,
-57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,8,48,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,
-16,8,48,0,57,59,122,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,16,10,49,0,57,59,
-120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,
-49,0,57,59,122,0,48,46,20,0,9,18,117,0,59,122,0,18,118,0,59,120,0,18,109,0,16,10,50,0,57,59,120,0,
-48,18,118,0,59,121,0,18,109,0,16,10,50,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,
-57,59,122,0,48,46,20,0,8,18,117,0,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,14,109,0,0,0,1,9,18,118,0,
-18,118,0,18,109,0,48,20,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,15,109,0,0,0,1,3,2,0,12,1,117,0,0,0,
-9,18,117,0,59,120,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,
-16,8,48,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,8,48,0,57,59,122,0,48,46,18,118,0,59,119,
-0,18,109,0,16,8,48,0,57,59,119,0,48,46,20,0,9,18,117,0,59,121,0,18,118,0,59,120,0,18,109,0,16,10,
-49,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,18,
-109,0,16,10,49,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,10,49,0,57,59,119,0,48,46,20,0,9,
-18,117,0,59,122,0,18,118,0,59,120,0,18,109,0,16,10,50,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,
-16,10,50,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,18,118,0,59,
-119,0,18,109,0,16,10,50,0,57,59,119,0,48,46,20,0,9,18,117,0,59,119,0,18,118,0,59,120,0,18,109,0,16,
-10,51,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,51,0,57,59,121,0,48,46,18,118,0,59,122,0,
-18,109,0,16,10,51,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,119,0,48,46,20,0,
-8,18,117,0,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,15,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,
-0,0,1,0,9,2,27,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,116,95,110,
-101,103,97,116,101,0,18,99,0,0,18,98,0,0,0,4,102,108,111,97,116,95,97,100,100,0,18,99,0,0,18,97,0,
-0,18,99,0,0,0,8,18,99,0,0,0,1,0,5,2,26,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,
-0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,
-105,110,116,95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,97,
-100,100,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,
-99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,27,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,
-1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,
-0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,
-95,110,101,103,97,116,101,0,18,121,0,0,18,121,0,0,0,4,102,108,111,97,116,95,97,100,100,0,18,120,0,
-0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,
-8,18,99,0,0,0,1,0,5,2,21,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,
-1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,
-95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,109,117,108,116,
-105,112,108,121,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,
-116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,22,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,
-120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,
-0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,
-111,97,116,95,100,105,118,105,100,101,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,
-116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,
-10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,
-0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,46,20,0,8,18,116,0,0,0,1,0,10,2,27,1,1,0,
-10,118,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,
-0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,47,20,0,8,18,116,0,0,0,
-1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,
-0,59,120,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,
-0,8,18,116,0,0,0,1,0,10,2,22,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,
-0,59,121,0,49,20,0,8,18,116,0,0,0,1,0,11,2,26,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,
-0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,118,0,
-59,121,0,18,117,0,59,121,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,46,20,0,
-8,18,116,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,
-0,59,121,0,47,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,47,20,0,8,18,116,0,0,0,
-1,0,11,2,21,1,1,0,11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,
-0,59,120,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,
-0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,48,20,0,8,18,116,0,0,0,1,0,11,2,22,1,1,0,
-11,118,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,
-0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,49,20,0,9,18,116,0,59,
-122,0,18,118,0,59,122,0,18,117,0,59,122,0,49,20,0,8,18,116,0,0,0,1,0,12,2,26,1,1,0,12,118,0,0,1,1,
-0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,
-20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,46,20,0,9,18,116,0,59,122,0,18,118,0,
-59,122,0,18,117,0,59,122,0,46,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,46,20,0,
-8,18,116,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,
-0,59,121,0,47,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,47,20,0,9,18,116,0,59,
-119,0,18,118,0,59,119,0,18,117,0,59,119,0,47,20,0,8,18,116,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,
-0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,48,
-20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,0,9,18,116,0,59,122,0,18,118,0,
-59,122,0,18,117,0,59,122,0,48,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,48,20,0,
-8,18,116,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,
-59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,
-0,59,121,0,49,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,49,20,0,9,18,116,0,59,
-119,0,18,118,0,59,119,0,18,117,0,59,119,0,49,20,0,8,18,116,0,0,0,1,0,6,2,26,1,1,0,6,118,0,0,1,1,0,
-6,117,0,0,0,1,3,2,0,6,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,0,
-9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,46,20,0,8,18,116,0,0,0,1,0,6,2,27,1,1,0,6,
-118,0,0,1,1,0,6,117,0,0,0,1,3,2,0,6,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,
-120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,47,20,0,8,18,116,0,0,0,1,0,6,
-2,21,1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,3,2,0,6,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,
-18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,0,8,18,116,
-0,0,0,1,0,6,2,22,1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,3,2,0,6,1,116,0,0,0,9,18,116,0,59,120,0,18,
-118,0,59,120,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,
-49,20,0,8,18,116,0,0,0,1,0,7,2,26,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,3,2,0,7,1,116,0,0,0,9,18,116,
-0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,
-117,0,59,121,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,46,20,0,8,18,116,0,
-0,0,1,0,7,2,27,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,3,2,0,7,1,116,0,0,0,9,18,116,0,59,120,0,18,118,
-0,59,120,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,47,20,
-0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,47,20,0,8,18,116,0,0,0,1,0,7,2,21,1,1,0,
-7,118,0,0,1,1,0,7,117,0,0,0,1,3,2,0,7,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,
-59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,48,20,0,9,18,116,0,59,122,
-0,18,118,0,59,122,0,18,117,0,59,122,0,48,20,0,8,18,116,0,0,0,1,0,7,2,22,1,1,0,7,118,0,0,1,1,0,7,
-117,0,0,0,1,3,2,0,7,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,49,20,0,9,
-18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,49,20,0,9,18,116,0,59,122,0,18,118,0,59,122,
-0,18,117,0,59,122,0,49,20,0,8,18,116,0,0,0,1,0,8,2,26,1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,3,2,0,8,
-1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,
-118,0,59,121,0,18,117,0,59,121,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,
-46,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,46,20,0,8,18,116,0,0,0,1,0,8,2,27,
-1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,3,2,0,8,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,
-117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,47,20,0,9,18,116,0,
-59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,47,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,
-0,59,119,0,47,20,0,8,18,116,0,0,0,1,0,8,2,21,1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,3,2,0,8,1,116,0,0,
-0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,
-121,0,18,117,0,59,121,0,48,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,117,0,59,122,0,48,20,0,9,
-18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,0,48,20,0,8,18,116,0,0,0,1,0,8,2,22,1,1,0,8,
-118,0,0,1,1,0,8,117,0,0,0,1,3,2,0,8,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,117,0,59,
-120,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,117,0,59,121,0,49,20,0,9,18,116,0,59,122,0,
-18,118,0,59,122,0,18,117,0,59,122,0,49,20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,117,0,59,119,
-0,49,20,0,8,18,116,0,0,0,1,0,13,2,26,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,
-18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,20,0,9,18,111,0,16,10,49,0,57,
-18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,20,0,8,18,111,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,
-1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,
-16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,20,
-0,8,18,111,0,0,0,1,0,13,2,22,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,
-16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,20,0,9,18,111,0,16,10,49,0,57,18,109,0,
-16,10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,8,18,111,0,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,1,0,14,
-110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,
-57,46,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,20,0,9,18,111,
-0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,20,0,8,18,111,0,0,0,1,0,14,2,27,1,
-1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,
-0,57,18,110,0,16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,
-49,0,57,47,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,47,20,0,8,
-18,111,0,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,
-8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,
-10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,
-16,10,50,0,57,49,20,0,8,18,111,0,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,
-111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,20,0,9,18,111,0,
-16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,20,0,9,18,111,0,16,10,50,0,57,18,
-109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,
-18,110,0,16,10,51,0,57,46,20,0,8,18,111,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,3,
-2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,47,20,0,9,
-18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,20,0,9,18,111,0,16,10,50,0,
-57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,47,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,
-51,0,57,18,110,0,16,10,51,0,57,47,20,0,8,18,111,0,0,0,1,0,15,2,22,1,1,0,15,109,0,0,1,1,0,15,110,0,
-0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,
-20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,49,20,0,9,18,111,0,16,
-10,50,0,57,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,49,20,0,9,18,111,0,16,10,51,0,57,18,109,0,
-16,10,51,0,57,18,110,0,16,10,51,0,57,49,20,0,8,18,111,0,0,0,1,0,10,2,26,1,1,0,9,97,0,0,1,1,0,10,
-117,0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,46,20,0,9,18,116,0,
-59,121,0,18,97,0,18,117,0,59,121,0,46,20,0,8,18,116,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,9,98,
-0,0,0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,46,20,0,9,18,116,0,59,
-121,0,18,118,0,59,121,0,18,98,0,46,20,0,8,18,116,0,0,0,1,0,10,2,27,1,1,0,9,97,0,0,1,1,0,10,117,0,0,
-0,1,3,2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,
-18,97,0,18,117,0,59,121,0,47,20,0,8,18,116,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,3,
-2,0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,47,20,0,9,18,116,0,59,121,0,18,
-118,0,59,121,0,18,98,0,47,20,0,8,18,116,0,0,0,1,0,10,2,21,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,3,2,
-0,10,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,97,0,
-18,117,0,59,121,0,48,20,0,8,18,116,0,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,10,
-1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,48,20,0,9,18,116,0,59,121,0,18,118,0,59,
-121,0,18,98,0,48,20,0,8,18,116,0,0,0,1,0,10,2,22,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,3,2,0,10,1,
-116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,97,0,18,117,
-0,59,121,0,49,20,0,8,18,116,0,0,0,1,0,10,2,22,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,10,1,116,0,
-0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,
-98,0,49,20,0,8,18,116,0,0,0,1,0,11,2,26,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,0,9,
-18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,121,0,
-46,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,46,20,0,8,18,116,0,0,0,1,0,11,2,26,1,1,0,11,
-118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,46,
-20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,98,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,
-18,98,0,46,20,0,8,18,116,0,0,0,1,0,11,2,27,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,0,
-0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,
-121,0,47,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,47,20,0,8,18,116,0,0,0,1,0,11,2,27,1,1,
-0,11,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,
-47,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,98,0,47,20,0,9,18,116,0,59,122,0,18,118,0,59,122,
-0,18,98,0,47,20,0,8,18,116,0,0,0,1,0,11,2,21,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,
-0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,
-121,0,48,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,48,20,0,8,18,116,0,0,0,1,0,11,2,21,1,1,
-0,11,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,
-48,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,98,0,48,20,0,9,18,116,0,59,122,0,18,118,0,59,122,
-0,18,98,0,48,20,0,8,18,116,0,0,0,1,0,11,2,22,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,3,2,0,11,1,116,0,
-0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,49,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,
-121,0,49,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,49,20,0,8,18,116,0,0,0,1,0,11,2,22,1,1,
-0,11,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,11,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,
-49,20,0,9,18,116,0,59,121,0,18,118,0,59,121,0,18,98,0,49,20,0,9,18,116,0,59,122,0,18,118,0,59,122,
-0,18,98,0,49,20,0,8,18,116,0,0,0,1,0,12,2,26,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,3,2,0,12,1,116,0,
-0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,46,20,0,9,18,116,0,59,121,0,18,97,0,18,117,0,59,
-121,0,46,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,46,20,0,9,18,116,0,59,119,0,18,97,0,18,
-117,0,59,119,0,46,20,0,8,18,116,0,0,0,1,0,12,2,26,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,3,2,0,12,1,
-116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,46,20,0,9,18,116,0,59,121,0,18,118,0,59,
-121,0,18,98,0,46,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,98,0,46,20,0,9,18,116,0,59,119,0,18,
-118,0,59,119,0,18,98,0,46,20,0,8,18,116,0,0,0,1,0,12,2,27,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,3,2,
-0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,47,20,0,9,18,116,0,59,121,0,18,97,0,
-18,117,0,59,121,0,47,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,47,20,0,9,18,116,0,59,119,
-0,18,97,0,18,117,0,59,119,0,47,20,0,8,18,116,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,
-3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,47,20,0,9,18,116,0,59,121,0,18,
-118,0,59,121,0,18,98,0,47,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,98,0,47,20,0,9,18,116,0,59,
-119,0,18,118,0,59,119,0,18,98,0,47,20,0,8,18,116,0,0,0,1,0,12,2,21,1,1,0,9,97,0,0,1,1,0,12,117,0,0,
-0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,48,20,0,9,18,116,0,59,121,0,
-18,97,0,18,117,0,59,121,0,48,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,48,20,0,9,18,116,0,
-59,119,0,18,97,0,18,117,0,59,119,0,48,20,0,8,18,116,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,9,98,
-0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,48,20,0,9,18,116,0,59,
-121,0,18,118,0,59,121,0,18,98,0,48,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,98,0,48,20,0,9,18,
-116,0,59,119,0,18,118,0,59,119,0,18,98,0,48,20,0,8,18,116,0,0,0,1,0,12,2,22,1,1,0,9,97,0,0,1,1,0,
-12,117,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,97,0,18,117,0,59,120,0,49,20,0,9,18,116,
-0,59,121,0,18,97,0,18,117,0,59,121,0,49,20,0,9,18,116,0,59,122,0,18,97,0,18,117,0,59,122,0,49,20,0,
-9,18,116,0,59,119,0,18,97,0,18,117,0,59,119,0,49,20,0,8,18,116,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,
-1,1,0,9,98,0,0,0,1,3,2,0,12,1,116,0,0,0,9,18,116,0,59,120,0,18,118,0,59,120,0,18,98,0,49,20,0,9,18,
-116,0,59,121,0,18,118,0,59,121,0,18,98,0,49,20,0,9,18,116,0,59,122,0,18,118,0,59,122,0,18,98,0,49,
-20,0,9,18,116,0,59,119,0,18,118,0,59,119,0,18,98,0,49,20,0,8,18,116,0,0,0,1,0,13,2,26,1,1,0,9,97,0,
-0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,
-46,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,46,20,0,8,18,111,0,0,0,1,0,13,2,26,
-1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,
-0,57,18,98,0,46,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,46,20,0,8,18,111,0,0,
-0,1,0,13,2,27,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,
-97,0,18,110,0,16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,47,20,0,
-8,18,111,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,
-8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,47,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,
-98,0,47,20,0,8,18,111,0,0,0,1,0,13,2,21,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,3,2,0,13,1,111,0,0,0,9,
-18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,
-110,0,16,10,49,0,57,48,20,0,8,18,111,0,0,0,1,0,13,2,21,1,1,0,13,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,
-13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,48,20,0,9,18,111,0,16,10,49,0,
-57,18,109,0,16,10,49,0,57,18,98,0,48,20,0,8,18,111,0,0,0,1,0,13,2,22,1,1,0,9,97,0,0,1,1,0,13,110,0,
-0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,49,20,0,9,18,111,
-0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,49,20,0,8,18,111,0,0,0,1,0,13,2,22,1,1,0,13,109,0,0,
-1,1,0,9,98,0,0,0,1,3,2,0,13,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,49,
-20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,49,20,0,8,18,111,0,0,0,1,0,14,2,26,1,
-1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,
-8,48,0,57,46,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,46,20,0,9,18,111,0,16,10,
-50,0,57,18,97,0,18,110,0,16,10,50,0,57,46,20,0,8,18,111,0,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,1,0,9,
-98,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,46,20,0,9,18,
-111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,46,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,
-50,0,57,18,98,0,46,20,0,8,18,111,0,0,0,1,0,14,2,27,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,
-111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,
-18,97,0,18,110,0,16,10,49,0,57,47,20,0,9,18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,47,
-20,0,8,18,111,0,0,0,1,0,14,2,27,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,
-0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,47,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,
-57,18,98,0,47,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,47,20,0,8,18,111,0,0,0,
-1,0,14,2,21,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,
-0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,48,20,0,9,
-18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,48,20,0,8,18,111,0,0,0,1,0,14,2,21,1,1,0,14,
-109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,
-98,0,48,20,0,9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,48,20,0,9,18,111,0,16,10,50,0,
-57,18,109,0,16,10,50,0,57,18,98,0,48,20,0,8,18,111,0,0,0,1,0,14,2,22,1,1,0,9,97,0,0,1,1,0,14,110,0,
-0,0,1,3,2,0,14,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,49,20,0,9,18,111,
-0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,49,20,0,9,18,111,0,16,10,50,0,57,18,97,0,18,110,0,
-16,10,50,0,57,49,20,0,8,18,111,0,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,14,1,
-111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,49,20,0,9,18,111,0,16,10,49,0,57,
-18,109,0,16,10,49,0,57,18,98,0,49,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,49,
-20,0,8,18,111,0,0,0,1,0,15,2,26,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,
-0,16,8,48,0,57,18,97,0,18,110,0,16,8,48,0,57,46,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,
-10,49,0,57,46,20,0,9,18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,46,20,0,9,18,111,0,16,
-10,51,0,57,18,97,0,18,110,0,16,10,51,0,57,46,20,0,8,18,111,0,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,1,
-0,9,98,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,46,20,0,
-9,18,111,0,16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,46,20,0,9,18,111,0,16,10,50,0,57,18,109,0,
-16,10,50,0,57,18,98,0,46,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,46,20,0,8,18,
-111,0,0,0,1,0,15,2,27,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,
-0,57,18,97,0,18,110,0,16,8,48,0,57,47,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,
-47,20,0,9,18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,47,20,0,9,18,111,0,16,10,51,0,57,
-18,97,0,18,110,0,16,10,51,0,57,47,20,0,8,18,111,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,1,1,0,9,98,0,0,
-0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,47,20,0,9,18,111,0,
-16,10,49,0,57,18,109,0,16,10,49,0,57,18,98,0,47,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,
-57,18,98,0,47,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,47,20,0,8,18,111,0,0,0,
-1,0,15,2,21,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,
-0,18,110,0,16,8,48,0,57,48,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,48,20,0,9,
-18,111,0,16,10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,48,20,0,9,18,111,0,16,10,51,0,57,18,97,0,18,
-110,0,16,10,51,0,57,48,20,0,8,18,111,0,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,
-15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,48,20,0,9,18,111,0,16,10,49,0,
-57,18,109,0,16,10,49,0,57,18,98,0,48,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,
-48,20,0,9,18,111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,48,20,0,8,18,111,0,0,0,1,0,15,2,22,
-1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,3,2,0,15,1,111,0,0,0,9,18,111,0,16,8,48,0,57,18,97,0,18,110,0,
-16,8,48,0,57,49,20,0,9,18,111,0,16,10,49,0,57,18,97,0,18,110,0,16,10,49,0,57,49,20,0,9,18,111,0,16,
-10,50,0,57,18,97,0,18,110,0,16,10,50,0,57,49,20,0,9,18,111,0,16,10,51,0,57,18,97,0,18,110,0,16,10,
-51,0,57,49,20,0,8,18,111,0,0,0,1,0,15,2,22,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,3,2,0,15,1,111,0,0,
-0,9,18,111,0,16,8,48,0,57,18,109,0,16,8,48,0,57,18,98,0,49,20,0,9,18,111,0,16,10,49,0,57,18,109,0,
-16,10,49,0,57,18,98,0,49,20,0,9,18,111,0,16,10,50,0,57,18,109,0,16,10,50,0,57,18,98,0,49,20,0,9,18,
-111,0,16,10,51,0,57,18,109,0,16,10,51,0,57,18,98,0,49,20,0,8,18,111,0,0,0,1,0,6,2,26,1,1,0,5,97,0,
-0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,46,0,0,1,0,6,2,26,1,1,0,6,118,
-0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,46,0,0,1,0,6,2,27,1,1,0,5,97,
-0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,47,0,0,1,0,6,2,27,1,1,0,6,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,47,0,0,1,0,6,2,21,1,1,0,5,
-97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,48,0,0,1,0,6,2,21,1,1,0,6,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,48,0,0,1,0,6,2,22,1,1,0,5,
-97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,49,0,0,1,0,6,2,22,1,1,0,6,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,49,0,0,1,0,7,2,26,1,1,0,5,
-97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,46,0,0,1,0,7,2,26,1,1,0,7,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,46,0,0,1,0,7,2,27,1,1,0,5,
-97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,47,0,0,1,0,7,2,27,1,1,0,7,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,47,0,0,1,0,7,2,21,1,1,0,5,
-97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,48,0,0,1,0,7,2,21,1,1,0,7,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,48,0,0,1,0,7,2,22,1,1,0,5,
-97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,49,0,0,1,0,7,2,22,1,1,0,7,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,49,0,0,1,0,8,2,26,1,1,0,5,
-97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,46,0,0,1,0,8,2,26,1,1,0,8,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,46,0,0,1,0,8,2,27,1,1,0,5,
-97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,47,0,0,1,0,8,2,27,1,1,0,8,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,47,0,0,1,0,8,2,21,1,1,0,5,
-97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,48,0,0,1,0,8,2,21,1,1,0,8,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,48,0,0,1,0,8,2,22,1,1,0,5,
-97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,49,0,0,1,0,8,2,22,1,1,0,8,
-118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,49,0,0,1,0,10,2,27,1,1,0,
-10,118,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,
-121,0,18,118,0,59,121,0,54,20,0,8,18,117,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,0,1,3,2,0,11,1,117,0,0,
-0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,54,20,0,9,18,
-117,0,59,122,0,18,118,0,59,122,0,54,20,0,8,18,117,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,0,1,3,2,0,12,
-1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,54,
-20,0,9,18,117,0,59,122,0,18,118,0,59,122,0,54,20,0,9,18,117,0,59,119,0,18,118,0,59,119,0,54,20,0,8,
-18,117,0,0,0,1,0,6,2,27,1,1,0,6,118,0,0,0,1,3,2,0,6,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,
-120,0,54,20,0,9,18,117,0,59,121,0,18,118,0,59,121,0,54,20,0,8,18,117,0,0,0,1,0,7,2,27,1,1,0,7,118,
-0,0,0,1,3,2,0,7,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,121,0,18,
-118,0,59,121,0,54,20,0,9,18,117,0,59,122,0,18,118,0,59,122,0,54,20,0,8,18,117,0,0,0,1,0,8,2,27,1,1,
-0,8,118,0,0,0,1,3,2,0,8,1,117,0,0,0,9,18,117,0,59,120,0,18,118,0,59,120,0,54,20,0,9,18,117,0,59,
-121,0,18,118,0,59,121,0,54,20,0,9,18,117,0,59,122,0,18,118,0,59,122,0,54,20,0,9,18,117,0,59,119,0,
-18,118,0,59,119,0,54,20,0,8,18,117,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,0,1,3,2,0,13,1,110,0,0,0,9,
-18,110,0,16,8,48,0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,110,0,16,10,49,0,57,18,109,0,16,10,49,0,
-57,54,20,0,8,18,110,0,0,0,1,0,14,2,27,1,1,0,14,109,0,0,0,1,3,2,0,14,1,110,0,0,0,9,18,110,0,16,8,48,
-0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,110,0,16,10,49,0,57,18,109,0,16,10,49,0,57,54,20,0,9,18,
-110,0,16,10,50,0,57,18,109,0,16,10,50,0,57,54,20,0,8,18,110,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,0,1,
-3,2,0,15,1,110,0,0,0,9,18,110,0,16,8,48,0,57,18,109,0,16,8,48,0,57,54,20,0,9,18,110,0,16,10,49,0,
-57,18,109,0,16,10,49,0,57,54,20,0,9,18,110,0,16,10,50,0,57,18,109,0,16,10,50,0,57,54,20,0,9,18,110,
-0,16,10,51,0,57,18,109,0,16,10,51,0,57,54,20,0,8,18,110,0,0,0,1,0,0,2,25,1,0,2,9,97,0,0,0,1,9,18,
-97,0,17,49,0,48,0,0,22,0,0,1,0,0,2,25,1,0,2,5,97,0,0,0,1,9,18,97,0,16,10,49,0,22,0,0,1,0,0,2,25,1,
-0,2,10,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,0,1,0,0,2,25,1,0,2,11,118,0,0,
+8,58,118,101,99,50,0,18,102,0,0,18,102,0,0,0,0,0,1,0,10,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,
+4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,50,0,18,
+120,0,0,0,0,0,1,0,10,1,1,1,0,1,98,0,0,0,1,8,58,118,101,99,50,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,
+0,31,0,0,0,0,1,0,11,1,1,1,0,9,102,0,0,0,1,8,58,118,101,99,51,0,18,102,0,0,18,102,0,0,18,102,0,0,0,
+0,0,1,0,11,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,
+116,0,18,120,0,0,18,105,0,0,0,8,58,118,101,99,51,0,18,120,0,0,0,0,0,1,0,11,1,1,1,0,1,98,0,0,0,1,8,
+58,118,101,99,51,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,12,1,1,1,0,9,102,0,0,0,1,8,
+58,118,101,99,52,0,18,102,0,0,18,102,0,0,18,102,0,0,18,102,0,0,0,0,0,1,0,12,1,1,1,0,5,105,0,0,0,1,
+3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,
+118,101,99,52,0,18,120,0,0,0,0,0,1,0,12,1,1,1,0,1,98,0,0,0,1,8,58,118,101,99,52,0,18,98,0,17,49,0,
+48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,6,1,1,1,0,5,105,0,0,0,1,8,58,105,118,101,99,50,0,18,105,0,0,
+18,105,0,0,0,0,0,1,0,6,1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,99,50,0,58,105,110,116,0,18,102,0,0,
+0,0,0,0,0,1,0,6,1,1,1,0,1,98,0,0,0,1,8,58,105,118,101,99,50,0,58,105,110,116,0,18,98,0,0,0,0,0,0,0,
+1,0,7,1,1,1,0,5,105,0,0,0,1,8,58,105,118,101,99,51,0,18,105,0,0,18,105,0,0,18,105,0,0,0,0,0,1,0,7,
+1,1,1,0,9,102,0,0,0,1,8,58,105,118,101,99,51,0,58,105,110,116,0,18,102,0,0,0,0,0,0,0,1,0,7,1,1,1,0,
+1,98,0,0,0,1,8,58,105,118,101,99,51,0,58,105,110,116,0,18,98,0,0,0,0,0,0,0,1,0,8,1,1,1,0,5,105,0,0,
+0,1,8,58,105,118,101,99,52,0,18,105,0,0,18,105,0,0,18,105,0,0,18,105,0,0,0,0,0,1,0,8,1,1,1,0,9,102,
+0,0,0,1,8,58,105,118,101,99,52,0,58,105,110,116,0,18,102,0,0,0,0,0,0,0,1,0,8,1,1,1,0,1,98,0,0,0,1,
+8,58,105,118,101,99,52,0,58,105,110,116,0,18,98,0,0,0,0,0,0,0,1,0,2,1,1,1,0,1,98,0,0,0,1,8,58,98,
+118,101,99,50,0,18,98,0,0,18,98,0,0,0,0,0,1,0,2,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,50,0,58,
+98,111,111,108,0,18,102,0,0,0,0,0,0,0,1,0,2,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,50,0,58,98,
+111,111,108,0,18,105,0,0,0,0,0,0,0,1,0,3,1,1,1,0,1,98,0,0,0,1,8,58,98,118,101,99,51,0,18,98,0,0,18,
+98,0,0,18,98,0,0,0,0,0,1,0,3,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,51,0,58,98,111,111,108,0,18,
+102,0,0,0,0,0,0,0,1,0,3,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,51,0,58,98,111,111,108,0,18,105,0,
+0,0,0,0,0,0,1,0,4,1,1,1,0,1,98,0,0,0,1,8,58,98,118,101,99,52,0,18,98,0,0,18,98,0,0,18,98,0,0,18,98,
+0,0,0,0,0,1,0,4,1,1,1,0,9,102,0,0,0,1,8,58,98,118,101,99,52,0,58,98,111,111,108,0,18,102,0,0,0,0,0,
+0,0,1,0,4,1,1,1,0,5,105,0,0,0,1,8,58,98,118,101,99,52,0,58,98,111,111,108,0,18,105,0,0,0,0,0,0,0,1,
+0,13,1,1,1,0,9,102,0,0,0,1,8,58,109,97,116,50,0,18,102,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,
+102,0,0,0,0,0,1,0,13,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,
+111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,50,0,18,120,0,0,0,0,0,1,0,13,1,1,1,0,1,98,0,0,
+0,1,8,58,109,97,116,50,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,14,1,1,1,0,9,102,0,0,
+0,1,8,58,109,97,116,51,0,18,102,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,
+17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,0,0,0,1,0,14,1,1,1,0,5,105,0,0,0,1,3,
+2,0,9,1,120,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,
+109,97,116,51,0,18,120,0,0,0,0,0,1,0,14,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,51,0,18,98,0,17,49,0,
+48,0,0,17,48,0,48,0,0,31,0,0,0,0,1,0,15,1,1,1,0,9,102,0,0,0,1,8,58,109,97,116,52,0,18,102,0,0,17,
+48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,17,48,0,48,0,0,0,17,48,
+0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,
+48,0,0,0,17,48,0,48,0,0,0,18,102,0,0,0,0,0,1,0,15,1,1,1,0,5,105,0,0,0,1,3,2,0,9,1,120,0,0,0,4,105,
+110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,105,0,0,0,8,58,109,97,116,52,0,18,120,0,0,
+0,0,0,1,0,15,1,1,1,0,1,98,0,0,0,1,8,58,109,97,116,52,0,18,98,0,17,49,0,48,0,0,17,48,0,48,0,0,31,0,
+0,0,0,1,0,0,2,1,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,102,108,111,97,116,95,97,100,100,0,18,97,0,0,
+18,97,0,0,18,98,0,0,0,0,1,0,9,2,27,1,1,0,9,97,0,0,0,1,3,2,0,9,1,98,0,0,0,4,102,108,111,97,116,95,
+110,101,103,97,116,101,0,18,98,0,0,18,97,0,0,0,8,18,98,0,0,0,1,0,0,2,2,1,0,2,9,97,0,0,1,1,0,9,98,0,
+0,0,1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,116,95,110,101,103,97,116,101,0,18,99,0,0,18,98,0,0,0,4,
+102,108,111,97,116,95,97,100,100,0,18,97,0,0,18,97,0,0,18,99,0,0,0,0,1,0,0,2,3,1,0,2,9,97,0,0,1,1,
+0,9,98,0,0,0,1,4,102,108,111,97,116,95,109,117,108,116,105,112,108,121,0,18,97,0,0,18,97,0,0,18,98,
+0,0,0,0,1,0,0,2,4,1,0,2,9,97,0,0,1,1,0,9,98,0,0,0,1,4,102,108,111,97,116,95,100,105,118,105,100,
+101,0,18,97,0,0,18,97,0,0,18,98,0,0,0,0,1,0,9,2,26,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,
+0,0,0,4,102,108,111,97,116,95,97,100,100,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,0,2,1,
+1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,97,116,0,18,97,0,0,0,
+58,102,108,111,97,116,0,18,98,0,0,0,46,0,0,20,0,0,1,0,5,2,27,1,1,0,5,97,0,0,0,1,3,2,0,9,1,120,0,0,
+0,3,2,0,5,1,98,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,102,
+108,111,97,116,95,110,101,103,97,116,101,0,18,120,0,0,18,120,0,0,0,4,102,108,111,97,116,95,116,111,
+95,105,110,116,0,18,98,0,0,18,120,0,0,0,8,18,98,0,0,0,1,0,0,2,2,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,
+9,18,97,0,18,98,0,54,21,0,0,1,0,9,2,21,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,9,1,99,0,0,0,4,102,
+108,111,97,116,95,109,117,108,116,105,112,108,121,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,
+1,0,0,2,3,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,102,108,111,97,116,0,18,
+97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,48,0,0,20,0,0,1,0,9,2,22,1,1,0,9,97,0,0,1,1,0,9,98,0,
+0,0,1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,116,95,100,105,118,105,100,101,0,18,99,0,0,18,97,0,0,18,
+98,0,0,0,8,18,99,0,0,0,1,0,0,2,4,1,0,2,5,97,0,0,1,1,0,5,98,0,0,0,1,9,18,97,0,58,105,110,116,0,58,
+102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,49,0,0,20,0,0,1,0,0,2,1,1,0,2,
+10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,
+117,0,59,121,0,21,0,0,1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,
+59,120,0,22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,10,117,
+0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,0,1,
+0,0,2,4,1,0,2,10,118,0,0,1,1,0,10,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,
+0,59,121,0,18,117,0,59,121,0,24,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,
+120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,
+0,59,122,0,21,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,
+120,0,22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,0,
+1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,
+118,0,59,121,0,18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,0,1,0,0,2,4,1,0,2,
+11,118,0,0,1,1,0,11,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,
+117,0,59,121,0,24,0,9,18,118,0,59,122,0,18,117,0,59,122,0,24,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,
+12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,
+0,9,18,118,0,59,122,0,18,117,0,59,122,0,21,0,9,18,118,0,59,119,0,18,117,0,59,119,0,21,0,0,1,0,0,2,
+2,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,
+121,0,18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,9,18,118,0,59,119,0,18,117,
+0,59,119,0,22,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,
+120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,9,
+18,118,0,59,119,0,18,117,0,59,119,0,23,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,1,0,12,117,0,0,0,1,9,18,
+118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,122,
+0,18,117,0,59,122,0,24,0,9,18,118,0,59,119,0,18,117,0,59,119,0,24,0,0,1,0,0,2,1,1,0,2,6,118,0,0,1,
+1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,
+21,0,0,1,0,0,2,2,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,
+18,118,0,59,121,0,18,117,0,59,121,0,22,0,0,1,0,0,2,3,1,0,2,6,118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,
+0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,0,59,121,0,23,0,0,1,0,0,2,4,1,0,2,6,
+118,0,0,1,1,0,6,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,
+0,59,121,0,24,0,0,1,0,0,2,1,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,
+120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,117,0,59,122,0,21,0,0,
+1,0,0,2,2,1,0,2,7,118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,
+0,59,121,0,18,117,0,59,121,0,22,0,9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,0,1,0,0,2,3,1,0,2,7,
+118,0,0,1,1,0,7,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,18,117,
+0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,0,1,0,0,2,4,1,0,2,7,118,0,0,1,1,0,7,117,
+0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,
+118,0,59,122,0,18,117,0,59,122,0,24,0,0,1,0,0,2,1,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,
+59,120,0,18,117,0,59,120,0,21,0,9,18,118,0,59,121,0,18,117,0,59,121,0,21,0,9,18,118,0,59,122,0,18,
+117,0,59,122,0,21,0,9,18,118,0,59,119,0,18,117,0,59,119,0,21,0,0,1,0,0,2,2,1,0,2,8,118,0,0,1,1,0,8,
+117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,22,0,9,18,118,0,59,121,0,18,117,0,59,121,0,22,0,
+9,18,118,0,59,122,0,18,117,0,59,122,0,22,0,9,18,118,0,59,119,0,18,117,0,59,119,0,22,0,0,1,0,0,2,3,
+1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,23,0,9,18,118,0,59,121,0,
+18,117,0,59,121,0,23,0,9,18,118,0,59,122,0,18,117,0,59,122,0,23,0,9,18,118,0,59,119,0,18,117,0,59,
+119,0,23,0,0,1,0,0,2,4,1,0,2,8,118,0,0,1,1,0,8,117,0,0,0,1,9,18,118,0,59,120,0,18,117,0,59,120,0,
+24,0,9,18,118,0,59,121,0,18,117,0,59,121,0,24,0,9,18,118,0,59,122,0,18,117,0,59,122,0,24,0,9,18,
+118,0,59,119,0,18,117,0,59,119,0,24,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,
+16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,21,0,0,1,0,
+0,2,2,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,
+18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,22,0,0,1,0,10,2,21,1,1,0,13,109,0,0,1,1,0,10,118,0,0,
+0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,
+109,0,16,10,49,0,57,59,120,0,48,46,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,121,0,48,18,118,0,
+59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,0,0,0,0,1,0,13,2,21,1,1,0,13,109,0,0,1,1,0,13,110,0,
+0,0,1,8,58,109,97,116,50,0,18,109,0,18,110,0,16,8,48,0,57,48,0,18,109,0,18,110,0,16,10,49,0,57,48,
+0,0,0,0,1,0,0,2,3,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,
+0,2,4,1,0,2,13,109,0,0,1,1,0,13,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,
+18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,
+1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,
+57,21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,0,1,0,0,2,2,1,0,2,14,109,0,0,1,1,0,14,
+110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,22,0,9,18,109,0,16,10,49,0,57,18,110,0,
+16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,22,0,0,1,0,11,2,21,1,1,0,14,109,
+0,0,1,1,0,11,118,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,
+18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,
+59,120,0,48,46,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,
+10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,121,0,48,46,0,18,118,0,59,
+120,0,18,109,0,16,8,48,0,57,59,122,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,122,0,48,46,18,
+118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,0,0,0,0,1,0,14,2,21,1,1,0,14,109,0,0,1,1,0,14,
+110,0,0,0,1,8,58,109,97,116,51,0,18,109,0,18,110,0,16,8,48,0,57,48,0,18,109,0,18,110,0,16,10,49,0,
+57,48,0,18,109,0,18,110,0,16,10,50,0,57,48,0,0,0,0,1,0,0,2,3,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,
+9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,0,2,4,1,0,2,14,109,0,0,1,1,0,14,110,0,0,0,1,9,18,109,0,
+16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,
+109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,
+9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,21,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,
+21,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,21,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,
+51,0,57,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,
+8,48,0,57,22,0,9,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,22,0,9,18,109,0,16,10,50,0,57,18,
+110,0,16,10,50,0,57,22,0,9,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,22,0,0,1,0,12,2,21,1,1,0,
+15,109,0,0,1,1,0,12,118,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,
+120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,120,0,48,46,18,118,0,59,122,0,18,109,0,16,10,
+50,0,57,59,120,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,120,0,48,46,0,18,118,0,59,120,0,
+18,109,0,16,8,48,0,57,59,121,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,
+59,122,0,18,109,0,16,10,50,0,57,59,121,0,48,46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,121,0,
+48,46,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,122,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,
+57,59,122,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,
+0,16,10,51,0,57,59,122,0,48,46,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,119,0,48,18,118,0,59,
+121,0,18,109,0,16,10,49,0,57,59,119,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,119,0,48,
+46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,119,0,48,46,0,0,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,
+1,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,109,0,18,110,0,16,8,48,0,57,48,0,18,109,0,18,110,0,16,
+10,49,0,57,48,0,18,109,0,18,110,0,16,10,50,0,57,48,0,18,109,0,18,110,0,16,10,51,0,57,48,0,0,0,0,1,
+0,0,2,3,1,0,2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,18,109,0,18,110,0,48,20,0,0,1,0,0,2,4,1,0,
+2,15,109,0,0,1,1,0,15,110,0,0,0,1,9,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,24,0,9,18,109,0,16,
+10,49,0,57,18,110,0,16,10,49,0,57,24,0,9,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,24,0,9,18,
+109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,24,0,0,1,0,0,2,1,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,9,
+18,118,0,59,120,0,18,97,0,21,0,9,18,118,0,59,121,0,18,97,0,21,0,0,1,0,0,2,2,1,0,2,10,118,0,0,1,1,0,
+9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,18,97,0,22,0,0,1,0,0,2,3,1,0,2,
+10,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,118,0,59,121,0,18,97,0,23,0,0,
+1,0,0,2,4,1,0,2,10,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,
+18,97,0,24,0,0,1,0,0,2,1,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,21,0,9,18,
+118,0,59,121,0,18,97,0,21,0,9,18,118,0,59,122,0,18,97,0,21,0,0,1,0,0,2,2,1,0,2,11,118,0,0,1,1,0,9,
+97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,18,97,0,22,0,9,18,118,0,59,122,0,
+18,97,0,22,0,0,1,0,0,2,3,1,0,2,11,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,
+118,0,59,121,0,18,97,0,23,0,9,18,118,0,59,122,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,11,118,0,0,1,1,0,9,
+97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,122,0,
+18,97,0,24,0,0,1,0,0,2,1,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,21,0,9,18,
+118,0,59,121,0,18,97,0,21,0,9,18,118,0,59,122,0,18,97,0,21,0,9,18,118,0,59,119,0,18,97,0,21,0,0,1,
+0,0,2,2,1,0,2,12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,22,0,9,18,118,0,59,121,0,
+18,97,0,22,0,9,18,118,0,59,122,0,18,97,0,22,0,9,18,118,0,59,119,0,18,97,0,22,0,0,1,0,0,2,3,1,0,2,
+12,118,0,0,1,1,0,9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,23,0,9,18,118,0,59,121,0,18,97,0,23,0,9,
+18,118,0,59,122,0,18,97,0,23,0,9,18,118,0,59,119,0,18,97,0,23,0,0,1,0,0,2,4,1,0,2,12,118,0,0,1,1,0,
+9,97,0,0,0,1,9,18,118,0,59,120,0,18,97,0,24,0,9,18,118,0,59,121,0,18,97,0,24,0,9,18,118,0,59,122,0,
+18,97,0,24,0,9,18,118,0,59,119,0,18,97,0,24,0,0,1,0,0,2,1,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,
+109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,0,1,0,0,2,2,1,0,2,13,109,0,0,
+1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,18,109,0,16,10,49,0,57,18,97,0,22,0,0,1,
+0,0,2,3,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,0,16,10,
+49,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,13,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,
+0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,0,1,0,0,2,1,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,
+109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,0,57,18,
+97,0,21,0,0,1,0,0,2,2,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,
+18,109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,0,1,0,0,2,3,1,0,2,14,109,
+0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,18,109,0,16,10,49,0,57,18,97,0,23,0,
+9,18,109,0,16,10,50,0,57,18,97,0,23,0,0,1,0,0,2,4,1,0,2,14,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,
+16,8,48,0,57,18,97,0,24,0,9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,0,57,18,97,0,
+24,0,0,1,0,0,2,1,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,21,0,9,18,109,
+0,16,10,49,0,57,18,97,0,21,0,9,18,109,0,16,10,50,0,57,18,97,0,21,0,9,18,109,0,16,10,51,0,57,18,97,
+0,21,0,0,1,0,0,2,2,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,22,0,9,18,
+109,0,16,10,49,0,57,18,97,0,22,0,9,18,109,0,16,10,50,0,57,18,97,0,22,0,9,18,109,0,16,10,51,0,57,18,
+97,0,22,0,0,1,0,0,2,3,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,23,0,9,
+18,109,0,16,10,49,0,57,18,97,0,23,0,9,18,109,0,16,10,50,0,57,18,97,0,23,0,9,18,109,0,16,10,51,0,57,
+18,97,0,23,0,0,1,0,0,2,4,1,0,2,15,109,0,0,1,1,0,9,97,0,0,0,1,9,18,109,0,16,8,48,0,57,18,97,0,24,0,
+9,18,109,0,16,10,49,0,57,18,97,0,24,0,9,18,109,0,16,10,50,0,57,18,97,0,24,0,9,18,109,0,16,10,51,0,
+57,18,97,0,24,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,13,109,0,0,0,1,8,58,118,101,99,50,0,18,118,0,
+59,120,0,18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,8,48,0,57,59,121,0,48,46,
+0,18,118,0,59,120,0,18,109,0,16,10,49,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,
+121,0,48,46,0,0,0,0,1,0,0,2,3,1,0,2,10,118,0,0,1,1,0,13,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,
+48,20,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,1,0,14,109,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,
+18,109,0,16,8,48,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,8,48,0,57,59,121,0,48,46,18,118,0,
+59,122,0,18,109,0,16,8,48,0,57,59,122,0,48,46,0,18,118,0,59,120,0,18,109,0,16,10,49,0,57,59,120,0,
+48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,49,0,
+57,59,122,0,48,46,0,18,118,0,59,120,0,18,109,0,16,10,50,0,57,59,120,0,48,18,118,0,59,121,0,18,109,
+0,16,10,50,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,0,0,0,0,1,0,
+0,2,3,1,0,2,11,118,0,0,1,1,0,14,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,0,0,1,0,12,2,21,1,1,
+0,12,118,0,0,1,1,0,15,109,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,109,0,16,8,48,0,57,59,
+120,0,48,18,118,0,59,121,0,18,109,0,16,8,48,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,8,48,
+0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,8,48,0,57,59,119,0,48,46,0,18,118,0,59,120,0,18,
+109,0,16,10,49,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,48,46,18,118,0,
+59,122,0,18,109,0,16,10,49,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,0,16,10,49,0,57,59,119,0,
+48,46,0,18,118,0,59,120,0,18,109,0,16,10,50,0,57,59,120,0,48,18,118,0,59,121,0,18,109,0,16,10,50,0,
+57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,50,0,57,59,122,0,48,46,18,118,0,59,119,0,18,109,
+0,16,10,50,0,57,59,119,0,48,46,0,18,118,0,59,120,0,18,109,0,16,10,51,0,57,59,120,0,48,18,118,0,59,
+121,0,18,109,0,16,10,51,0,57,59,121,0,48,46,18,118,0,59,122,0,18,109,0,16,10,51,0,57,59,122,0,48,
+46,18,118,0,59,119,0,18,109,0,16,10,51,0,57,59,119,0,48,46,0,0,0,0,1,0,0,2,3,1,0,2,12,118,0,0,1,1,
+0,15,109,0,0,0,1,9,18,118,0,18,118,0,18,109,0,48,20,0,0,1,0,9,2,27,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,
+1,3,2,0,9,1,99,0,0,0,4,102,108,111,97,116,95,110,101,103,97,116,101,0,18,99,0,0,18,98,0,0,0,4,102,
+108,111,97,116,95,97,100,100,0,18,99,0,0,18,97,0,0,18,99,0,0,0,8,18,99,0,0,0,1,0,5,2,26,1,1,0,5,97,
+0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,
+95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,
+121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,97,100,100,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,
+108,111,97,116,95,116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,27,1,1,0,5,
+97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,
+111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,
+0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,110,101,103,97,116,101,0,18,121,0,0,18,121,0,0,0,
+4,102,108,111,97,116,95,97,100,100,0,18,120,0,0,18,120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,
+116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,21,1,1,0,5,97,0,0,1,1,0,5,98,
+0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,95,116,111,95,102,108,111,
+97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,121,0,0,18,98,
+0,0,0,4,102,108,111,97,116,95,109,117,108,116,105,112,108,121,0,18,120,0,0,18,120,0,0,18,121,0,0,0,
+4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,99,0,0,0,1,0,5,2,22,1,
+1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,3,2,0,9,1,120,0,0,1,1,121,0,0,0,3,2,0,5,1,99,0,0,0,4,105,110,116,
+95,116,111,95,102,108,111,97,116,0,18,120,0,0,18,97,0,0,0,4,105,110,116,95,116,111,95,102,108,111,
+97,116,0,18,121,0,0,18,98,0,0,0,4,102,108,111,97,116,95,100,105,118,105,100,101,0,18,120,0,0,18,
+120,0,0,18,121,0,0,0,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,99,0,0,18,120,0,0,0,8,18,
+99,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,
+18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,117,0,59,121,0,46,0,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,
+1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,
+0,18,117,0,59,121,0,47,0,0,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,
+50,0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,18,117,0,59,121,0,48,0,0,0,0,1,0,
+10,2,22,1,1,0,10,118,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,
+120,0,49,0,18,118,0,59,121,0,18,117,0,59,121,0,49,0,0,0,0,1,0,11,2,26,1,1,0,11,118,0,0,1,1,0,11,
+117,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,117,
+0,59,121,0,46,0,18,118,0,59,122,0,18,117,0,59,122,0,46,0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,1,1,0,
+11,117,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,0,18,
+117,0,59,121,0,47,0,18,118,0,59,122,0,18,117,0,59,122,0,47,0,0,0,0,1,0,11,2,21,1,1,0,11,118,0,0,1,
+1,0,11,117,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,
+18,117,0,59,121,0,48,0,18,118,0,59,122,0,18,117,0,59,122,0,48,0,0,0,0,1,0,11,2,22,1,1,0,11,118,0,0,
+1,1,0,11,117,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,49,0,18,118,0,59,121,
+0,18,117,0,59,121,0,49,0,18,118,0,59,122,0,18,117,0,59,122,0,49,0,0,0,0,1,0,12,2,26,1,1,0,12,118,0,
+0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,
+121,0,18,117,0,59,121,0,46,0,18,118,0,59,122,0,18,117,0,59,122,0,46,0,18,118,0,59,119,0,18,117,0,
+59,119,0,46,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,118,
+0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,0,18,117,0,59,121,0,47,0,18,118,0,59,122,0,18,
+117,0,59,122,0,47,0,18,118,0,59,119,0,18,117,0,59,119,0,47,0,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,
+1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,
+18,117,0,59,121,0,48,0,18,118,0,59,122,0,18,117,0,59,122,0,48,0,18,118,0,59,119,0,18,117,0,59,119,
+0,48,0,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,
+120,0,18,117,0,59,120,0,49,0,18,118,0,59,121,0,18,117,0,59,121,0,49,0,18,118,0,59,122,0,18,117,0,
+59,122,0,49,0,18,118,0,59,119,0,18,117,0,59,119,0,49,0,0,0,0,1,0,6,2,26,1,1,0,6,118,0,0,1,1,0,6,
+117,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,
+117,0,59,121,0,46,0,0,0,0,1,0,6,2,27,1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,
+18,118,0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,0,18,117,0,59,121,0,47,0,0,0,0,1,0,6,2,21,
+1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,
+48,0,18,118,0,59,121,0,18,117,0,59,121,0,48,0,0,0,0,1,0,6,2,22,1,1,0,6,118,0,0,1,1,0,6,117,0,0,0,1,
+8,58,105,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,49,0,18,118,0,59,121,0,18,117,0,59,
+121,0,49,0,0,0,0,1,0,7,2,26,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,118,0,
+59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,117,0,59,121,0,46,0,18,118,0,59,122,0,18,117,
+0,59,122,0,46,0,0,0,0,1,0,7,2,27,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,
+118,0,59,120,0,18,117,0,59,120,0,47,0,18,118,0,59,121,0,18,117,0,59,121,0,47,0,18,118,0,59,122,0,
+18,117,0,59,122,0,47,0,0,0,0,1,0,7,2,21,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,
+0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,18,117,0,59,121,0,48,0,18,118,0,59,
+122,0,18,117,0,59,122,0,48,0,0,0,0,1,0,7,2,22,1,1,0,7,118,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,
+99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,49,0,18,118,0,59,121,0,18,117,0,59,121,0,49,0,18,118,0,
+59,122,0,18,117,0,59,122,0,49,0,0,0,0,1,0,8,2,26,1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,
+101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,46,0,18,118,0,59,121,0,18,117,0,59,121,0,46,0,18,
+118,0,59,122,0,18,117,0,59,122,0,46,0,18,118,0,59,119,0,18,117,0,59,119,0,46,0,0,0,0,1,0,8,2,27,1,
+1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,47,
+0,18,118,0,59,121,0,18,117,0,59,121,0,47,0,18,118,0,59,122,0,18,117,0,59,122,0,47,0,18,118,0,59,
+119,0,18,117,0,59,119,0,47,0,0,0,0,1,0,8,2,21,1,1,0,8,118,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,
+99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,48,0,18,118,0,59,121,0,18,117,0,59,121,0,48,0,18,118,0,
+59,122,0,18,117,0,59,122,0,48,0,18,118,0,59,119,0,18,117,0,59,119,0,48,0,0,0,0,1,0,8,2,22,1,1,0,8,
+118,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,49,0,18,
+118,0,59,121,0,18,117,0,59,121,0,49,0,18,118,0,59,122,0,18,117,0,59,122,0,49,0,18,118,0,59,119,0,
+18,117,0,59,119,0,49,0,0,0,0,1,0,13,2,26,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,50,
+0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,
+46,0,0,0,0,1,0,13,2,27,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,
+0,57,18,110,0,16,8,48,0,57,47,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,0,0,0,0,1,0,13,2,
+22,1,1,0,13,109,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,110,0,16,8,
+48,0,57,49,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,49,0,0,0,0,1,0,14,2,26,1,1,0,14,109,0,0,
+1,1,0,14,110,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,0,18,109,
+0,16,10,49,0,57,18,110,0,16,10,49,0,57,46,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,0,0,0,
+0,1,0,14,2,27,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,18,
+110,0,16,8,48,0,57,47,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,47,0,18,109,0,16,10,50,0,57,
+18,110,0,16,10,50,0,57,47,0,0,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,
+116,51,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,
+0,57,49,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,49,0,0,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,
+1,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,46,0,18,109,0,
+16,10,49,0,57,18,110,0,16,10,49,0,57,46,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,46,0,18,
+109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,46,0,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,1,1,0,15,110,0,
+0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,47,0,18,109,0,16,10,49,0,57,
+18,110,0,16,10,49,0,57,47,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,47,0,18,109,0,16,10,51,0,
+57,18,110,0,16,10,51,0,57,47,0,0,0,0,1,0,15,2,22,1,1,0,15,109,0,0,1,1,0,15,110,0,0,0,1,8,58,109,97,
+116,52,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,49,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,
+0,57,49,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,49,0,18,109,0,16,10,51,0,57,18,110,0,16,10,
+51,0,57,49,0,0,0,0,1,0,10,2,26,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,97,0,18,
+117,0,59,120,0,46,0,18,97,0,18,117,0,59,121,0,46,0,0,0,0,1,0,10,2,26,1,1,0,10,118,0,0,1,1,0,9,98,0,
+0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,98,0,46,0,18,118,0,59,121,0,18,98,0,46,0,0,0,0,1,0,
+10,2,27,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,97,0,18,117,0,59,120,0,47,0,18,
+97,0,18,117,0,59,121,0,47,0,0,0,0,1,0,10,2,27,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,
+50,0,18,118,0,59,120,0,18,98,0,47,0,18,118,0,59,121,0,18,98,0,47,0,0,0,0,1,0,10,2,21,1,1,0,9,97,0,
+0,1,1,0,10,117,0,0,0,1,8,58,118,101,99,50,0,18,97,0,18,117,0,59,120,0,48,0,18,97,0,18,117,0,59,121,
+0,48,0,0,0,0,1,0,10,2,21,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,
+0,18,98,0,48,0,18,118,0,59,121,0,18,98,0,48,0,0,0,0,1,0,10,2,22,1,1,0,9,97,0,0,1,1,0,10,117,0,0,0,
+1,8,58,118,101,99,50,0,18,97,0,18,117,0,59,120,0,49,0,18,97,0,18,117,0,59,121,0,49,0,0,0,0,1,0,10,
+2,22,1,1,0,10,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,18,98,0,49,0,18,
+118,0,59,121,0,18,98,0,49,0,0,0,0,1,0,11,2,26,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,8,58,118,101,99,
+51,0,18,97,0,18,117,0,59,120,0,46,0,18,97,0,18,117,0,59,121,0,46,0,18,97,0,18,117,0,59,122,0,46,0,
+0,0,0,1,0,11,2,26,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,98,
+0,46,0,18,118,0,59,121,0,18,98,0,46,0,18,118,0,59,122,0,18,98,0,46,0,0,0,0,1,0,11,2,27,1,1,0,9,97,
+0,0,1,1,0,11,117,0,0,0,1,8,58,118,101,99,51,0,18,97,0,18,117,0,59,120,0,47,0,18,97,0,18,117,0,59,
+121,0,47,0,18,97,0,18,117,0,59,122,0,47,0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,8,
+58,118,101,99,51,0,18,118,0,59,120,0,18,98,0,47,0,18,118,0,59,121,0,18,98,0,47,0,18,118,0,59,122,0,
+18,98,0,47,0,0,0,0,1,0,11,2,21,1,1,0,9,97,0,0,1,1,0,11,117,0,0,0,1,8,58,118,101,99,51,0,18,97,0,18,
+117,0,59,120,0,48,0,18,97,0,18,117,0,59,121,0,48,0,18,97,0,18,117,0,59,122,0,48,0,0,0,0,1,0,11,2,
+21,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,18,98,0,48,0,18,118,
+0,59,121,0,18,98,0,48,0,18,118,0,59,122,0,18,98,0,48,0,0,0,0,1,0,11,2,22,1,1,0,9,97,0,0,1,1,0,11,
+117,0,0,0,1,8,58,118,101,99,51,0,18,97,0,18,117,0,59,120,0,49,0,18,97,0,18,117,0,59,121,0,49,0,18,
+97,0,18,117,0,59,122,0,49,0,0,0,0,1,0,11,2,22,1,1,0,11,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,
+51,0,18,118,0,59,120,0,18,98,0,49,0,18,118,0,59,121,0,18,98,0,49,0,18,118,0,59,122,0,18,98,0,49,0,
+0,0,0,1,0,12,2,26,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,97,0,18,117,0,59,120,
+0,46,0,18,97,0,18,117,0,59,121,0,46,0,18,97,0,18,117,0,59,122,0,46,0,18,97,0,18,117,0,59,119,0,46,
+0,0,0,0,1,0,12,2,26,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,18,
+98,0,46,0,18,118,0,59,121,0,18,98,0,46,0,18,118,0,59,122,0,18,98,0,46,0,18,118,0,59,119,0,18,98,0,
+46,0,0,0,0,1,0,12,2,27,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,97,0,18,117,0,
+59,120,0,47,0,18,97,0,18,117,0,59,121,0,47,0,18,97,0,18,117,0,59,122,0,47,0,18,97,0,18,117,0,59,
+119,0,47,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,
+120,0,18,98,0,47,0,18,118,0,59,121,0,18,98,0,47,0,18,118,0,59,122,0,18,98,0,47,0,18,118,0,59,119,0,
+18,98,0,47,0,0,0,0,1,0,12,2,21,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,97,0,18,
+117,0,59,120,0,48,0,18,97,0,18,117,0,59,121,0,48,0,18,97,0,18,117,0,59,122,0,48,0,18,97,0,18,117,0,
+59,119,0,48,0,0,0,0,1,0,12,2,21,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,52,0,18,118,0,
+59,120,0,18,98,0,48,0,18,118,0,59,121,0,18,98,0,48,0,18,118,0,59,122,0,18,98,0,48,0,18,118,0,59,
+119,0,18,98,0,48,0,0,0,0,1,0,12,2,22,1,1,0,9,97,0,0,1,1,0,12,117,0,0,0,1,8,58,118,101,99,52,0,18,
+97,0,18,117,0,59,120,0,49,0,18,97,0,18,117,0,59,121,0,49,0,18,97,0,18,117,0,59,122,0,49,0,18,97,0,
+18,117,0,59,119,0,49,0,0,0,0,1,0,12,2,22,1,1,0,12,118,0,0,1,1,0,9,98,0,0,0,1,8,58,118,101,99,52,0,
+18,118,0,59,120,0,18,98,0,49,0,18,118,0,59,121,0,18,98,0,49,0,18,118,0,59,122,0,18,98,0,49,0,18,
+118,0,59,119,0,18,98,0,49,0,0,0,0,1,0,13,2,26,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,
+50,0,18,97,0,18,110,0,16,8,48,0,57,46,0,18,97,0,18,110,0,16,10,49,0,57,46,0,0,0,0,1,0,13,2,26,1,1,
+0,13,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,98,0,46,0,18,109,0,
+16,10,49,0,57,18,98,0,46,0,0,0,0,1,0,13,2,27,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,
+50,0,18,97,0,18,110,0,16,8,48,0,57,47,0,18,97,0,18,110,0,16,10,49,0,57,47,0,0,0,0,1,0,13,2,27,1,1,
+0,13,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,98,0,47,0,18,109,0,
+16,10,49,0,57,18,98,0,47,0,0,0,0,1,0,13,2,21,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,
+50,0,18,97,0,18,110,0,16,8,48,0,57,48,0,18,97,0,18,110,0,16,10,49,0,57,48,0,0,0,0,1,0,13,2,21,1,1,
+0,13,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,98,0,48,0,18,109,0,
+16,10,49,0,57,18,98,0,48,0,0,0,0,1,0,13,2,22,1,1,0,9,97,0,0,1,1,0,13,110,0,0,0,1,8,58,109,97,116,
+50,0,18,97,0,18,110,0,16,8,48,0,57,49,0,18,97,0,18,110,0,16,10,49,0,57,49,0,0,0,0,1,0,13,2,22,1,1,
+0,13,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,98,0,49,0,18,109,0,
+16,10,49,0,57,18,98,0,49,0,0,0,0,1,0,14,2,26,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,116,
+51,0,18,97,0,18,110,0,16,8,48,0,57,46,0,18,97,0,18,110,0,16,10,49,0,57,46,0,18,97,0,18,110,0,16,10,
+50,0,57,46,0,0,0,0,1,0,14,2,26,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,51,0,18,109,0,
+16,8,48,0,57,18,98,0,46,0,18,109,0,16,10,49,0,57,18,98,0,46,0,18,109,0,16,10,50,0,57,18,98,0,46,0,
+0,0,0,1,0,14,2,27,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,116,51,0,18,97,0,18,110,0,16,8,
+48,0,57,47,0,18,97,0,18,110,0,16,10,49,0,57,47,0,18,97,0,18,110,0,16,10,50,0,57,47,0,0,0,0,1,0,14,
+2,27,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,18,98,0,47,0,
+18,109,0,16,10,49,0,57,18,98,0,47,0,18,109,0,16,10,50,0,57,18,98,0,47,0,0,0,0,1,0,14,2,21,1,1,0,9,
+97,0,0,1,1,0,14,110,0,0,0,1,8,58,109,97,116,51,0,18,97,0,18,110,0,16,8,48,0,57,48,0,18,97,0,18,110,
+0,16,10,49,0,57,48,0,18,97,0,18,110,0,16,10,50,0,57,48,0,0,0,0,1,0,14,2,21,1,1,0,14,109,0,0,1,1,0,
+9,98,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,18,98,0,48,0,18,109,0,16,10,49,0,57,18,98,
+0,48,0,18,109,0,16,10,50,0,57,18,98,0,48,0,0,0,0,1,0,14,2,22,1,1,0,9,97,0,0,1,1,0,14,110,0,0,0,1,8,
+58,109,97,116,51,0,18,97,0,18,110,0,16,8,48,0,57,49,0,18,97,0,18,110,0,16,10,49,0,57,49,0,18,97,0,
+18,110,0,16,10,50,0,57,49,0,0,0,0,1,0,14,2,22,1,1,0,14,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,
+51,0,18,109,0,16,8,48,0,57,18,98,0,49,0,18,109,0,16,10,49,0,57,18,98,0,49,0,18,109,0,16,10,50,0,57,
+18,98,0,49,0,0,0,0,1,0,15,2,26,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,97,0,18,
+110,0,16,8,48,0,57,46,0,18,97,0,18,110,0,16,10,49,0,57,46,0,18,97,0,18,110,0,16,10,50,0,57,46,0,18,
+97,0,18,110,0,16,10,51,0,57,46,0,0,0,0,1,0,15,2,26,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,
+116,52,0,18,109,0,16,8,48,0,57,18,98,0,46,0,18,109,0,16,10,49,0,57,18,98,0,46,0,18,109,0,16,10,50,
+0,57,18,98,0,46,0,18,109,0,16,10,51,0,57,18,98,0,46,0,0,0,0,1,0,15,2,27,1,1,0,9,97,0,0,1,1,0,15,
+110,0,0,0,1,8,58,109,97,116,52,0,18,97,0,18,110,0,16,8,48,0,57,47,0,18,97,0,18,110,0,16,10,49,0,57,
+47,0,18,97,0,18,110,0,16,10,50,0,57,47,0,18,97,0,18,110,0,16,10,51,0,57,47,0,0,0,0,1,0,15,2,27,1,1,
+0,15,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,18,98,0,47,0,18,109,0,
+16,10,49,0,57,18,98,0,47,0,18,109,0,16,10,50,0,57,18,98,0,47,0,18,109,0,16,10,51,0,57,18,98,0,47,0,
+0,0,0,1,0,15,2,21,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,97,0,18,110,0,16,8,
+48,0,57,48,0,18,97,0,18,110,0,16,10,49,0,57,48,0,18,97,0,18,110,0,16,10,50,0,57,48,0,18,97,0,18,
+110,0,16,10,51,0,57,48,0,0,0,0,1,0,15,2,21,1,1,0,15,109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,52,
+0,18,109,0,16,8,48,0,57,18,98,0,48,0,18,109,0,16,10,49,0,57,18,98,0,48,0,18,109,0,16,10,50,0,57,18,
+98,0,48,0,18,109,0,16,10,51,0,57,18,98,0,48,0,0,0,0,1,0,15,2,22,1,1,0,9,97,0,0,1,1,0,15,110,0,0,0,
+1,8,58,109,97,116,52,0,18,97,0,18,110,0,16,8,48,0,57,49,0,18,97,0,18,110,0,16,10,49,0,57,49,0,18,
+97,0,18,110,0,16,10,50,0,57,49,0,18,97,0,18,110,0,16,10,51,0,57,49,0,0,0,0,1,0,15,2,22,1,1,0,15,
+109,0,0,1,1,0,9,98,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,18,98,0,49,0,18,109,0,16,10,
+49,0,57,18,98,0,49,0,18,109,0,16,10,50,0,57,18,98,0,49,0,18,109,0,16,10,51,0,57,18,98,0,49,0,0,0,0,
+1,0,6,2,26,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,46,0,0,
+1,0,6,2,26,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,46,0,0,
+1,0,6,2,27,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,47,0,0,
+1,0,6,2,27,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,47,0,0,
+1,0,6,2,21,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,48,0,0,
+1,0,6,2,21,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,48,0,0,
+1,0,6,2,22,1,1,0,5,97,0,0,1,1,0,6,117,0,0,0,1,8,58,105,118,101,99,50,0,18,97,0,0,0,18,117,0,49,0,0,
+1,0,6,2,22,1,1,0,6,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,50,0,18,98,0,0,0,49,0,0,
+1,0,7,2,26,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,46,0,0,
+1,0,7,2,26,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,46,0,0,
+1,0,7,2,27,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,47,0,0,
+1,0,7,2,27,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,47,0,0,
+1,0,7,2,21,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,48,0,0,
+1,0,7,2,21,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,48,0,0,
+1,0,7,2,22,1,1,0,5,97,0,0,1,1,0,7,117,0,0,0,1,8,58,105,118,101,99,51,0,18,97,0,0,0,18,117,0,49,0,0,
+1,0,7,2,22,1,1,0,7,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,51,0,18,98,0,0,0,49,0,0,
+1,0,8,2,26,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,46,0,0,
+1,0,8,2,26,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,46,0,0,
+1,0,8,2,27,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,47,0,0,
+1,0,8,2,27,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,47,0,0,
+1,0,8,2,21,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,48,0,0,
+1,0,8,2,21,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,48,0,0,
+1,0,8,2,22,1,1,0,5,97,0,0,1,1,0,8,117,0,0,0,1,8,58,105,118,101,99,52,0,18,97,0,0,0,18,117,0,49,0,0,
+1,0,8,2,22,1,1,0,8,118,0,0,1,1,0,5,98,0,0,0,1,8,18,118,0,58,105,118,101,99,52,0,18,98,0,0,0,49,0,0,
+1,0,10,2,27,1,1,0,10,118,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,54,0,18,118,0,59,121,0,54,
+0,0,0,0,1,0,11,2,27,1,1,0,11,118,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,54,0,18,118,0,59,
+121,0,54,0,18,118,0,59,122,0,54,0,0,0,0,1,0,12,2,27,1,1,0,12,118,0,0,0,1,8,58,118,101,99,52,0,18,
+118,0,59,120,0,54,0,18,118,0,59,121,0,54,0,18,118,0,59,122,0,54,0,18,118,0,59,119,0,54,0,0,0,0,1,0,
+6,2,27,1,1,0,6,118,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,54,0,18,118,0,59,121,0,54,0,
+0,0,0,1,0,7,2,27,1,1,0,7,118,0,0,0,1,8,58,105,118,101,99,51,0,18,118,0,59,120,0,54,0,18,118,0,59,
+121,0,54,0,18,118,0,59,122,0,54,0,0,0,0,1,0,8,2,27,1,1,0,8,118,0,0,0,1,8,58,105,118,101,99,52,0,18,
+118,0,59,120,0,54,0,18,118,0,59,121,0,54,0,18,118,0,59,122,0,54,0,18,118,0,59,119,0,54,0,0,0,0,1,0,
+13,2,27,1,1,0,13,109,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,54,0,18,109,0,16,10,49,0,
+57,54,0,0,0,0,1,0,14,2,27,1,1,0,14,109,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,54,0,18,
+109,0,16,10,49,0,57,54,0,18,109,0,16,10,50,0,57,54,0,0,0,0,1,0,15,2,27,1,1,0,15,109,0,0,0,1,8,58,
+109,97,116,52,0,18,109,0,16,8,48,0,57,54,0,18,109,0,16,10,49,0,57,54,0,18,109,0,16,10,50,0,57,54,0,
+18,109,0,16,10,51,0,57,54,0,0,0,0,1,0,0,2,25,1,0,2,9,97,0,0,0,1,9,18,97,0,17,49,0,48,0,0,22,0,0,1,
+0,0,2,25,1,0,2,5,97,0,0,0,1,9,18,97,0,16,10,49,0,22,0,0,1,0,0,2,25,1,0,2,10,118,0,0,0,1,9,18,118,0,
+59,120,0,52,0,9,18,118,0,59,121,0,52,0,0,1,0,0,2,25,1,0,2,11,118,0,0,0,1,9,18,118,0,59,120,0,52,0,
+9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,0,1,0,0,2,25,1,0,2,12,118,0,0,0,1,9,18,118,0,59,
+120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,0,59,119,0,52,0,0,1,0,0,2,25,
+1,0,2,6,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,0,1,0,0,2,25,1,0,2,7,118,0,0,
0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,0,1,0,0,2,25,1,0,2,
-12,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,
-0,59,119,0,52,0,0,1,0,0,2,25,1,0,2,6,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,
-0,1,0,0,2,25,1,0,2,7,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,
-122,0,52,0,0,1,0,0,2,25,1,0,2,8,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,
-118,0,59,122,0,52,0,9,18,118,0,59,119,0,52,0,0,1,0,0,2,25,1,0,2,13,109,0,0,0,1,9,18,109,0,16,8,48,
-0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,0,1,0,0,2,25,1,0,2,14,109,0,0,0,1,9,18,109,0,16,8,48,0,57,
-52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,0,1,0,0,2,25,1,0,2,15,109,0,0,0,1,
-9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,9,18,109,
-0,16,10,51,0,57,52,0,0,1,0,0,2,24,1,0,2,9,97,0,0,0,1,9,18,97,0,17,49,0,48,0,0,21,0,0,1,0,0,2,24,1,
-0,2,5,97,0,0,0,1,9,18,97,0,16,10,49,0,21,0,0,1,0,0,2,24,1,0,2,10,118,0,0,0,1,9,18,118,0,59,120,0,
-51,0,9,18,118,0,59,121,0,51,0,0,1,0,0,2,24,1,0,2,11,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,
-0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,0,1,0,0,2,24,1,0,2,12,118,0,0,0,1,9,18,118,0,59,120,0,51,
-0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,9,18,118,0,59,119,0,51,0,0,1,0,0,2,24,1,0,2,6,
-118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,0,1,0,0,2,24,1,0,2,7,118,0,0,0,1,9,
-18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,0,1,0,0,2,24,1,0,2,8,118,
-0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,9,18,118,0,59,
-119,0,51,0,0,1,0,0,2,24,1,0,2,13,109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,
-51,0,0,1,0,0,2,24,1,0,2,14,109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,
-9,18,109,0,16,10,50,0,57,51,0,0,1,0,0,2,24,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,
-109,0,16,10,49,0,57,51,0,9,18,109,0,16,10,50,0,57,51,0,9,18,109,0,16,10,51,0,57,51,0,0,1,0,9,2,25,
-1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,0,9,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,52,0,8,18,98,0,
-0,0,1,0,5,2,25,1,0,2,5,97,0,0,1,1,0,5,0,0,0,1,3,2,0,5,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,
-52,0,8,18,98,0,0,0,1,0,10,2,25,1,0,2,10,118,0,0,1,1,0,5,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,18,
-118,0,20,0,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,8,18,117,0,0,0,1,0,11,2,25,1,0,2,11,
-118,0,0,1,1,0,5,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,52,0,9,
-18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,8,18,117,0,0,0,1,0,12,2,25,1,0,2,12,118,0,0,1,1,0,
-5,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,
-0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,0,59,119,0,52,0,8,18,117,0,0,0,1,0,6,2,25,1,0,2,6,118,0,0,
-1,1,0,5,0,0,0,1,3,2,0,6,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,52,0,9,18,118,0,
-59,121,0,52,0,8,18,117,0,0,0,1,0,7,2,25,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,3,2,0,7,1,117,0,0,0,9,18,
-117,0,18,118,0,20,0,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,8,
-18,117,0,0,0,1,0,8,2,25,1,0,2,8,118,0,0,1,1,0,5,0,0,0,1,3,2,0,8,1,117,0,0,0,9,18,117,0,18,118,0,20,
-0,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,0,59,119,0,
-52,0,8,18,117,0,0,0,1,0,13,2,25,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,3,2,0,13,1,110,0,0,0,9,18,110,0,
-18,109,0,20,0,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,8,18,110,0,0,0,1,0,14,2,
-25,1,0,2,14,109,0,0,1,1,0,5,0,0,0,1,3,2,0,14,1,110,0,0,0,9,18,110,0,18,109,0,20,0,9,18,109,0,16,8,
-48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,8,18,110,0,0,0,1,0,15,2,
-25,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,3,2,0,15,1,110,0,0,0,9,18,110,0,18,109,0,20,0,9,18,109,0,16,8,
-48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,9,18,109,0,16,10,51,0,57,
-52,0,8,18,110,0,0,0,1,0,9,2,24,1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,0,9,1,98,0,0,0,9,18,98,0,18,97,0,
-20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,5,2,24,1,0,2,5,97,0,0,1,1,0,5,0,0,0,1,3,2,0,5,1,98,0,0,0,9,
-18,98,0,18,97,0,20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,10,2,24,1,0,2,10,118,0,0,1,1,0,5,0,0,0,1,3,2,
-0,10,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,8,18,
-117,0,0,0,1,0,11,2,24,1,0,2,11,118,0,0,1,1,0,5,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,18,118,0,20,
-0,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,8,18,117,0,0,0,1,0,12,
-2,24,1,0,2,12,118,0,0,1,1,0,5,0,0,0,1,3,2,0,12,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,
-120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,9,18,118,0,59,119,0,51,0,8,18,117,0,0,
-0,1,0,6,2,24,1,0,2,6,118,0,0,1,1,0,5,0,0,0,1,3,2,0,6,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,
-0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,8,18,117,0,0,0,1,0,7,2,24,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,
-3,2,0,7,1,117,0,0,0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,
-18,118,0,59,122,0,51,0,8,18,117,0,0,0,1,0,8,2,24,1,0,2,8,118,0,0,1,1,0,5,0,0,0,1,3,2,0,8,1,117,0,0,
-0,9,18,117,0,18,118,0,20,0,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,
-51,0,9,18,118,0,59,119,0,51,0,8,18,117,0,0,0,1,0,13,2,24,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,3,2,0,13,
-1,110,0,0,0,9,18,110,0,18,109,0,20,0,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,8,
-18,110,0,0,0,1,0,14,2,24,1,0,2,14,109,0,0,1,1,0,5,0,0,0,1,3,2,0,14,1,110,0,0,0,9,18,110,0,18,109,0,
-20,0,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,8,18,
-110,0,0,0,1,0,15,2,24,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,3,2,0,15,1,110,0,0,0,9,18,110,0,18,109,0,20,
-0,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,9,18,
-109,0,16,10,51,0,57,52,0,8,18,110,0,0,0,1,0,1,2,15,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,
-0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,
-1,2,15,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,
-116,0,18,98,0,0,0,40,0,0,1,0,1,2,16,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,
-111,97,116,95,108,101,115,115,0,18,99,0,0,18,98,0,0,18,97,0,0,0,8,18,99,0,0,0,1,0,1,2,16,1,1,0,5,
-97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,
-0,41,0,0,1,0,1,2,18,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,
-111,97,116,95,108,101,115,115,0,18,103,0,0,18,98,0,0,18,97,0,0,0,4,102,108,111,97,116,95,101,113,
-117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,18,1,1,0,5,97,0,0,
-1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,43,0,
-0,1,0,1,2,17,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,
-116,95,108,101,115,115,0,18,103,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,101,113,117,97,
-108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,17,1,1,0,5,97,0,0,1,1,0,
-5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,42,0,0,1,0,
-1,2,11,1,1,0,1,97,0,0,1,1,0,1,98,0,0,0,1,8,18,97,0,18,98,0,39,0,0,1,0,1,2,29,1,1,0,1,97,0,0,0,1,8,
-18,97,0,15,2,48,0,38,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,9,102,0,0,0,1,4,102,108,111,97,116,95,
-112,114,105,110,116,0,18,102,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,5,105,0,0,0,1,4,105,110,
-116,95,112,114,105,110,116,0,18,105,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,1,98,0,0,0,1,4,98,
-111,111,108,95,112,114,105,110,116,0,18,98,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,10,118,0,0,
-0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,
-0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,11,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,
-59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,
-118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,12,118,0,0,0,1,9,58,112,114,105,110,116,
-0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,
-116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,
-105,110,116,0,1,1,0,6,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,
-105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,7,118,0,0,0,1,9,58,112,
-114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,
-112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,8,118,0,0,0,1,
-9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,
-0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,119,
-0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,2,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,
-120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,
-0,3,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,
-118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,
-116,0,1,1,0,4,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,
-116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,
-110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,13,109,0,0,0,1,9,58,112,
-114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,0,57,0,
-0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,14,109,0,0,0,1,9,58,112,114,105,110,116,0,18,109,0,16,8,
-48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,0,57,0,0,0,9,58,112,114,105,110,116,0,
-18,109,0,16,10,50,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,15,109,0,0,0,1,9,58,112,114,105,
-110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,0,57,0,0,0,9,58,
-112,114,105,110,116,0,18,109,0,16,10,50,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,51,0,
-57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,16,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,
-0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,17,101,0,0,0,1,4,105,110,116,95,112,114,105,
-110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,18,101,0,0,0,1,4,105,110,116,95,112,
-114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,19,101,0,0,0,1,4,105,110,116,
-95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,20,101,0,0,0,1,4,105,
-110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,21,101,0,0,0,1,
-4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,0
+8,118,0,0,0,1,9,18,118,0,59,120,0,52,0,9,18,118,0,59,121,0,52,0,9,18,118,0,59,122,0,52,0,9,18,118,
+0,59,119,0,52,0,0,1,0,0,2,25,1,0,2,13,109,0,0,0,1,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,
+0,57,52,0,0,1,0,0,2,25,1,0,2,14,109,0,0,0,1,9,18,109,0,16,8,48,0,57,52,0,9,18,109,0,16,10,49,0,57,
+52,0,9,18,109,0,16,10,50,0,57,52,0,0,1,0,0,2,25,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,52,0,
+9,18,109,0,16,10,49,0,57,52,0,9,18,109,0,16,10,50,0,57,52,0,9,18,109,0,16,10,51,0,57,52,0,0,1,0,0,
+2,24,1,0,2,9,97,0,0,0,1,9,18,97,0,17,49,0,48,0,0,21,0,0,1,0,0,2,24,1,0,2,5,97,0,0,0,1,9,18,97,0,16,
+10,49,0,21,0,0,1,0,0,2,24,1,0,2,10,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,0,
+1,0,0,2,24,1,0,2,11,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,18,118,0,59,
+122,0,51,0,0,1,0,0,2,24,1,0,2,12,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,0,59,121,0,51,0,9,
+18,118,0,59,122,0,51,0,9,18,118,0,59,119,0,51,0,0,1,0,0,2,24,1,0,2,6,118,0,0,0,1,9,18,118,0,59,120,
+0,51,0,9,18,118,0,59,121,0,51,0,0,1,0,0,2,24,1,0,2,7,118,0,0,0,1,9,18,118,0,59,120,0,51,0,9,18,118,
+0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,0,1,0,0,2,24,1,0,2,8,118,0,0,0,1,9,18,118,0,59,120,0,51,0,
+9,18,118,0,59,121,0,51,0,9,18,118,0,59,122,0,51,0,9,18,118,0,59,119,0,51,0,0,1,0,0,2,24,1,0,2,13,
+109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,0,1,0,0,2,24,1,0,2,14,109,0,
+0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,9,18,109,0,16,10,50,0,57,51,0,0,1,
+0,0,2,24,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,9,18,109,
+0,16,10,50,0,57,51,0,9,18,109,0,16,10,51,0,57,51,0,0,1,0,9,2,25,1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,
+0,9,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,52,0,8,18,98,0,0,0,1,0,5,2,25,1,0,2,5,97,0,0,1,1,0,
+5,0,0,0,1,3,2,0,5,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,52,0,8,18,98,0,0,0,1,0,10,2,25,1,0,2,
+10,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,0,0,
+0,1,0,11,2,25,1,0,2,11,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,61,0,18,118,
+0,59,121,0,61,0,18,118,0,59,122,0,61,0,0,0,0,1,0,12,2,25,1,0,2,12,118,0,0,1,1,0,5,0,0,0,1,8,58,118,
+101,99,52,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,118,0,59,122,0,61,0,18,118,0,59,119,0,
+61,0,0,0,0,1,0,6,2,25,1,0,2,6,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,
+61,0,18,118,0,59,121,0,61,0,0,0,0,1,0,7,2,25,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,
+51,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,118,0,59,122,0,61,0,0,0,0,1,0,8,2,25,1,0,2,8,
+118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,52,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,
+118,0,59,122,0,61,0,18,118,0,59,119,0,61,0,0,0,0,1,0,13,2,25,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,8,58,
+109,97,116,50,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,0,0,0,0,1,0,14,2,25,1,0,2,14,
+109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,
+0,18,109,0,16,10,50,0,57,61,0,0,0,0,1,0,15,2,25,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,
+52,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,0,18,109,0,16,10,50,0,57,61,0,18,109,0,
+16,10,51,0,57,61,0,0,0,0,1,0,9,2,24,1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,0,9,1,98,0,0,0,9,18,98,0,18,
+97,0,20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,5,2,24,1,0,2,5,97,0,0,1,1,0,5,0,0,0,1,3,2,0,5,1,98,0,0,
+0,9,18,98,0,18,97,0,20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,10,2,24,1,0,2,10,118,0,0,1,1,0,5,0,0,0,1,
+8,58,118,101,99,50,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,0,0,0,1,0,11,2,24,1,0,2,11,118,
+0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,
+122,0,60,0,0,0,0,1,0,12,2,24,1,0,2,12,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,
+0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,18,118,0,59,119,0,60,0,0,0,0,1,0,6,2,24,1,0,2,
+6,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,0,
+0,0,1,0,7,2,24,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,51,0,18,118,0,59,120,0,60,0,18,
+118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,0,0,0,1,0,8,2,24,1,0,2,8,118,0,0,1,1,0,5,0,0,0,1,8,58,
+105,118,101,99,52,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,18,118,0,
+59,119,0,60,0,0,0,0,1,0,13,2,24,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,
+8,48,0,57,60,0,18,109,0,16,10,49,0,57,60,0,0,0,0,1,0,14,2,24,1,0,2,14,109,0,0,1,1,0,5,0,0,0,1,8,58,
+109,97,116,51,0,18,109,0,16,8,48,0,57,60,0,18,109,0,16,10,49,0,57,60,0,18,109,0,16,10,50,0,57,60,0,
+0,0,0,1,0,15,2,24,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,60,0,
+18,109,0,16,10,49,0,57,60,0,18,109,0,16,10,50,0,57,60,0,18,109,0,16,10,51,0,57,60,0,0,0,0,1,0,1,2,
+15,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,
+18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,1,2,15,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,
+102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,40,0,0,1,0,1,2,16,1,1,0,9,97,
+0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,99,0,0,18,
+98,0,0,18,97,0,0,0,8,18,99,0,0,0,1,0,1,2,16,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,
+116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,41,0,0,1,0,1,2,18,1,1,0,9,97,0,0,1,1,0,9,98,
+0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,103,0,0,18,98,
+0,0,18,97,0,0,0,4,102,108,111,97,116,95,101,113,117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,
+103,0,18,101,0,32,0,0,1,0,1,2,18,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,
+0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,43,0,0,1,0,1,2,17,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,
+0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,103,0,0,18,97,0,0,18,98,0,
+0,0,4,102,108,111,97,116,95,101,113,117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,
+101,0,32,0,0,1,0,1,2,17,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,
+102,108,111,97,116,0,18,98,0,0,0,42,0,0,1,0,1,2,11,1,1,0,1,97,0,0,1,1,0,1,98,0,0,0,1,8,18,97,0,18,
+98,0,39,0,0,1,0,1,2,29,1,1,0,1,97,0,0,0,1,8,18,97,0,15,2,48,0,38,0,0,1,0,0,0,112,114,105,110,116,0,
+1,1,0,9,102,0,0,0,1,4,102,108,111,97,116,95,112,114,105,110,116,0,18,102,0,0,0,0,1,0,0,0,112,114,
+105,110,116,0,1,1,0,5,105,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,105,0,0,0,0,1,0,0,0,
+112,114,105,110,116,0,1,1,0,1,98,0,0,0,1,4,98,111,111,108,95,112,114,105,110,116,0,18,98,0,0,0,0,1,
+0,0,0,112,114,105,110,116,0,1,1,0,10,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,
+0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,11,118,
+0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,
+121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,
+0,12,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,
+118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,
+18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,6,118,0,0,0,1,9,58,112,114,105,110,
+116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,
+105,110,116,0,1,1,0,7,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,
+105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,
+112,114,105,110,116,0,1,1,0,8,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,
+112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,
+58,112,114,105,110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,2,118,0,0,0,
+1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,
+0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,3,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,
+120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,
+59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,4,118,0,0,0,1,9,58,112,114,105,110,116,0,18,
+118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,
+18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,
+110,116,0,1,1,0,13,109,0,0,0,1,9,58,112,114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,
+105,110,116,0,18,109,0,16,10,49,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,14,109,0,0,0,1,9,
+58,112,114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,
+0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,50,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,
+1,1,0,15,109,0,0,0,1,9,58,112,114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,
+116,0,18,109,0,16,10,49,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,50,0,57,0,0,0,9,58,
+112,114,105,110,116,0,18,109,0,16,10,51,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,16,101,0,
+0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,17,
+101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,
+1,0,18,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,
+116,0,1,1,0,19,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,
+105,110,116,0,1,1,0,20,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,
+112,114,105,110,116,0,1,1,0,21,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,0
diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin.gc b/src/mesa/shader/slang/library/slang_fragment_builtin.gc
index adfdaae8df3..776c96db9b0 100755
--- a/src/mesa/shader/slang/library/slang_fragment_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_fragment_builtin.gc
@@ -26,7 +26,7 @@ varying float gl_FogFragCoord;
//
vec4 texture1D (sampler1D sampler, float coord, float bias) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
@@ -39,66 +39,48 @@ vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias) {
}
vec4 texture2D (sampler2D sampler, vec2 coord, float bias) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias) {
- vec2 u;
- u.s = coord.s / coord.p;
- u.t = coord.t / coord.p;
- return texture2D (sampler, u, bias);
+ return texture2D (sampler, vec2 (coord.s / coord.p, coord.t / coord.p), bias);
}
vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias) {
- vec2 u;
- u.s = coord.s / coord.q;
- u.t = coord.t / coord.q;
- return texture2D (sampler, u, bias);
+ return texture2D (sampler, vec2 (coord.s / coord.q, coord.t / coord.q), bias);
}
vec4 texture3D (sampler3D sampler, vec3 coord, float bias) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias) {
- vec3 u;
- u.s = coord.s / coord.q;
- u.t = coord.t / coord.q;
- u.p = coord.p / coord.q;
- return texture3D (sampler, u, bias);
+ return texture3D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), bias);
}
vec4 textureCube (samplerCube sampler, vec3 coord, float bias) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias) {
- vec3 u;
- u.s = coord.s / coord.q;
- u.t = 0.0;
- u.p = coord.p / coord.q;
- return shadow1D (sampler, u, bias);
+ return shadow1D (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), bias);
}
vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias) {
- vec3 u;
- u.s = coord.s / coord.q;
- u.t = coord.t / coord.q;
- u.p = coord.p / coord.q;
- return shadow2D (sampler, u, bias);
+ return shadow2D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), bias);
}
//
@@ -106,42 +88,42 @@ vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias) {
//
float dFdx (float p) {
- // XXX:
+ // XXX:
return 0.0;
}
vec2 dFdx (vec2 p) {
- // XXX:
+ // XXX:
return vec2 (0.0);
}
vec3 dFdx (vec3 p) {
- // XXX:
+ // XXX:
return vec3 (0.0);
}
vec4 dFdx (vec4 p) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
float dFdy (float p) {
- // XXX:
+ // XXX:
return 0.0;
}
vec2 dFdy (vec2 p) {
- // XXX:
+ // XXX:
return vec2 (0.0);
}
vec3 dFdy (vec3 p) {
- // XXX:
+ // XXX:
return vec3 (0.0);
}
vec4 dFdy (vec4 p) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h b/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h
index 895b71c1539..d8202a83ca2 100644
--- a/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h
+++ b/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h
@@ -21,51 +21,47 @@
0,1,0,12,0,116,101,120,116,117,114,101,50,68,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,10,99,
111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,
12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,
-0,0,11,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,115,
-0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,0,49,20,0,9,18,117,0,59,116,0,18,
-99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,20,0,8,58,116,101,120,116,117,
-114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,
-116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,
-12,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,115,0,
-18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,
-99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,
-114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,
-116,101,120,116,117,114,101,51,68,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,
-114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,
-101,120,116,117,114,101,51,68,80,114,111,106,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,
-111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,
-111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,
-111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,
-114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,51,68,
-0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,116,101,120,116,
-117,114,101,67,117,98,101,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,
-0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,
-100,111,119,49,68,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,
-9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,
+0,0,11,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,
+0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,
+111,114,100,0,59,112,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,0,
+0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,
+17,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,
+58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,
+111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,
+18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,116,101,120,116,117,
+114,101,51,68,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,98,
+105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,
+101,51,68,80,114,111,106,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,
+1,0,0,9,98,105,97,115,0,0,0,1,8,58,116,101,120,116,117,114,101,51,68,0,18,115,97,109,112,108,101,
+114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,
+18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,
+112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,116,101,120,
+116,117,114,101,67,117,98,101,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,
+100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,
+97,100,111,119,49,68,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,
+0,9,98,105,97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,
119,50,68,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,98,105,
97,115,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,
80,114,111,106,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,
-98,105,97,115,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,
-99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,17,48,0,48,0,0,20,0,9,18,117,0,59,112,0,
-18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,115,104,97,100,111,
-119,49,68,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,12,0,115,
-104,97,100,111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,
-111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,
-111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,
-114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,114,
-100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,115,104,97,100,111,119,50,68,0,18,115,
-97,109,112,108,101,114,0,0,18,117,0,0,18,98,105,97,115,0,0,0,0,0,1,0,9,0,100,70,100,120,0,1,0,0,9,
-112,0,0,0,1,8,17,48,0,48,0,0,0,0,1,0,10,0,100,70,100,120,0,1,0,0,10,112,0,0,0,1,8,58,118,101,99,50,
-0,17,48,0,48,0,0,0,0,0,0,1,0,11,0,100,70,100,120,0,1,0,0,11,112,0,0,0,1,8,58,118,101,99,51,0,17,48,
-0,48,0,0,0,0,0,0,1,0,12,0,100,70,100,120,0,1,0,0,12,112,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,
-0,0,0,0,0,1,0,9,0,100,70,100,121,0,1,0,0,9,112,0,0,0,1,8,17,48,0,48,0,0,0,0,1,0,10,0,100,70,100,
-121,0,1,0,0,10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,0,48,0,0,0,0,0,0,1,0,11,0,100,70,100,121,0,1,
-0,0,11,112,0,0,0,1,8,58,118,101,99,51,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,100,70,100,121,0,1,0,0,12,
-112,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,9,0,102,119,105,100,116,104,0,1,0,0,9,
-112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,
-0,18,112,0,0,0,0,0,46,0,0,1,0,10,0,102,119,105,100,116,104,0,1,0,0,10,112,0,0,0,1,8,58,97,98,115,0,
-58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,
-0,11,0,102,119,105,100,116,104,0,1,0,0,11,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,
-0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,12,0,102,119,105,100,116,
-104,0,1,0,0,12,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,
-100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,0
+98,105,97,115,0,0,0,1,8,58,115,104,97,100,111,119,49,68,0,18,115,97,109,112,108,101,114,0,0,58,118,
+101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,17,48,0,48,0,0,
+0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,
+0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,112,108,101,114,0,
+0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,98,105,97,115,0,0,0,1,8,58,115,104,97,100,111,119,50,68,
+0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,
+111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,
+18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,0,
+0,0,1,0,9,0,100,70,100,120,0,1,0,0,9,112,0,0,0,1,8,17,48,0,48,0,0,0,0,1,0,10,0,100,70,100,120,0,1,
+0,0,10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,0,48,0,0,0,0,0,0,1,0,11,0,100,70,100,120,0,1,0,0,11,
+112,0,0,0,1,8,58,118,101,99,51,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,100,70,100,120,0,1,0,0,12,112,0,0,
+0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,9,0,100,70,100,121,0,1,0,0,9,112,0,0,0,1,8,17,
+48,0,48,0,0,0,0,1,0,10,0,100,70,100,121,0,1,0,0,10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,0,48,0,0,
+0,0,0,0,1,0,11,0,100,70,100,121,0,1,0,0,11,112,0,0,0,1,8,58,118,101,99,51,0,17,48,0,48,0,0,0,0,0,0,
+1,0,12,0,100,70,100,121,0,1,0,0,12,112,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,9,0,
+102,119,105,100,116,104,0,1,0,0,9,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,
+0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,10,0,102,119,105,100,116,104,0,1,
+0,0,10,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,
+100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,11,0,102,119,105,100,116,104,0,1,0,0,11,112,0,0,0,1,8,58,97,
+98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,
+46,0,0,1,0,12,0,102,119,105,100,116,104,0,1,0,0,12,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,
+0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,0
diff --git a/src/mesa/shader/slang/library/slang_vertex_builtin.gc b/src/mesa/shader/slang/library/slang_vertex_builtin.gc
index ae3e071a2ea..2b5953a0323 100755
--- a/src/mesa/shader/slang/library/slang_vertex_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_vertex_builtin.gc
@@ -48,7 +48,7 @@ vec4 ftransform () {
//
vec4 texture1DLod (sampler1D sampler, float coord, float lod) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
@@ -61,64 +61,46 @@ vec4 texture1DProjLod (sampler1D sampler, vec4 coord, float lod) {
}
vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 texture2DProjLod (sampler2D sampler, vec3 coord, float lod) {
- vec2 u;
- u.s = coord.s / coord.p;
- u.t = coord.t / coord.p;
- return texture2DLod (sampler, u, lod);
+ return texture2DLod (sampler, vec2 (coord.s / coord.p, coord.t / coord.p), lod);
}
vec4 texture2DProjLod (sampler2D sampler, vec4 coord, float lod) {
- vec2 u;
- u.s = coord.s / coord.q;
- u.t = coord.t / coord.q;
- return texture2DLod (sampler, u, lod);
+ return texture2DLod (sampler, vec2 (coord.s / coord.q, coord.t / coord.q), lod);
}
vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 texture3DProjLod (sampler3D sampler, vec4 coord, float lod) {
- vec3 u;
- u.s = coord.s / coord.q;
- u.t = coord.t / coord.q;
- u.p = coord.p / coord.q;
- return texture3DLod (sampler, u, lod);
+ return texture3DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), lod);
}
vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod) {
- // XXX:
+ // XXX:
return vec4 (0.0);
}
vec4 shadow1DProjLod (sampler1DShadow sampler, vec4 coord, float lod) {
- vec3 u;
- u.s = coord.s / coord.q;
- u.t = 0.0;
- u.p = coord.p / coord.q;
- return shadow1DLod (sampler, u, lod);
+ return shadow1DLod (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), lod);
}
vec4 shadow2DProjLod (sampler2DShadow sampler, vec4 coord, float lod) {
- vec3 u;
- u.s = coord.s / coord.q;
- u.t = coord.t / coord.q;
- u.p = coord.p / coord.q;
- return shadow2DLod (sampler, u, lod);
+ return shadow2DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), lod);
}
diff --git a/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h b/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h
index c3929f12b69..c4698a65d65 100644
--- a/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h
+++ b/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h
@@ -33,39 +33,35 @@
111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,76,111,100,0,1,0,0,17,115,97,109,112,
108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,
17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,76,111,100,0,1,0,
-0,17,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,
-2,0,10,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,
-112,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,
-0,49,20,0,8,58,116,101,120,116,117,114,101,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,18,
-117,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,76,111,
-100,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,111,100,
-0,0,0,1,3,2,0,10,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,
-114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,
-100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,50,68,76,111,100,0,18,115,97,109,112,108,
-101,114,0,0,18,117,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,76,111,
-100,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,
-0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,80,
-114,111,106,76,111,100,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,
-0,0,9,108,111,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,
-0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,
-99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,99,
-111,111,114,100,0,59,113,0,49,20,0,8,58,116,101,120,116,117,114,101,51,68,76,111,100,0,18,115,97,
-109,112,108,101,114,0,0,18,117,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,
-67,117,98,101,76,111,100,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,
-1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,
-111,119,49,68,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,
-1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,
-111,119,50,68,76,111,100,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,
-1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,97,100,
-111,119,49,68,80,114,111,106,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,
-111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,11,1,117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,
-114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,20,0,9,18,117,0,59,116,0,17,48,0,48,0,0,20,
-0,9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,
-58,115,104,97,100,111,119,49,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,108,
-111,100,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,76,111,100,0,1,0,0,21,115,
-97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,11,1,
-117,0,0,0,9,18,117,0,59,115,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,
-20,0,9,18,117,0,59,116,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,20,0,
-9,18,117,0,59,112,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,20,0,8,58,
-115,104,97,100,111,119,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,18,117,0,0,18,108,111,
-100,0,0,0,0,0,0
+0,17,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,
+58,116,101,120,116,117,114,101,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,
+50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,0,49,0,18,99,111,111,114,100,
+0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,
+116,117,114,101,50,68,80,114,111,106,76,111,100,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,
+99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,76,111,
+100,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,
+111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,
+49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,76,111,100,0,1,0,0,18,
+115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,
+118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,80,114,111,106,
+76,111,100,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,
+111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,51,68,76,111,100,0,18,115,97,109,112,108,101,114,
+0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,
+99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,
+0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,
+114,101,67,117,98,101,76,111,100,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,
+100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,
+97,100,111,119,49,68,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,
+100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,
+97,100,111,119,50,68,76,111,100,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,
+100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,
+97,100,111,119,49,68,80,114,111,106,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,12,
+99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,115,104,97,100,111,119,49,68,76,111,100,0,
+18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,
+111,114,100,0,59,113,0,49,0,17,48,0,48,0,0,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,
+100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,
+106,76,111,100,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,
+108,111,100,0,0,0,1,8,58,115,104,97,100,111,119,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,
+0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,
+111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,0,
+18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,0
diff --git a/src/mesa/shader/slang/slang_assemble.c b/src/mesa/shader/slang/slang_assemble.c
index b8f9d78b7af..6c05e71b8bd 100644
--- a/src/mesa/shader/slang/slang_assemble.c
+++ b/src/mesa/shader/slang/slang_assemble.c
@@ -156,14 +156,14 @@ GLboolean slang_assembly_file_restore_point_load (slang_assembly_file *file,
/* utility functions */
static GLboolean sizeof_variable (slang_assemble_ctx *A, slang_type_specifier *spec,
- slang_type_qualifier qual, slang_operation *array_size, GLuint *size)
+ slang_type_qualifier qual, GLuint array_len, GLuint *size)
{
slang_storage_aggregate agg;
/* calculate the size of the variable's aggregate */
if (!slang_storage_aggregate_construct (&agg))
return GL_FALSE;
- if (!_slang_aggregate_variable (&agg, spec, array_size, A->space.funcs, A->space.structs,
+ if (!_slang_aggregate_variable (&agg, spec, array_len, A->space.funcs, A->space.structs,
A->space.vars, A->mach, A->file, A->atoms))
{
slang_storage_aggregate_destruct (&agg);
@@ -184,7 +184,7 @@ static GLboolean sizeof_variable2 (slang_assemble_ctx *A, slang_variable *var, G
var->address = *size;
if (var->type.qualifier == slang_qual_out || var->type.qualifier == slang_qual_inout)
var->address += 4;
- return sizeof_variable (A, &var->type.specifier, var->type.qualifier, var->array_size, size);
+ return sizeof_variable (A, &var->type.specifier, var->type.qualifier, var->array_len, size);
}
static GLboolean sizeof_variables (slang_assemble_ctx *A, slang_variable_scope *vars, GLuint start,
@@ -233,7 +233,7 @@ slang_function *_slang_locate_function (slang_function_scope *funcs, slang_atom
if (!slang_assembly_typeinfo_construct (&ti))
return NULL;
- if (!_slang_typeof_operation (&params[j], space, &ti, atoms))
+ if (!_slang_typeof_operation_ (&params[j], space, &ti, atoms))
{
slang_assembly_typeinfo_destruct (&ti);
return NULL;
@@ -301,7 +301,7 @@ GLboolean _slang_assemble_function (slang_assemble_ctx *A, slang_function *fun)
/* calculate return value size */
param_size = 0;
if (fun->header.type.specifier.type != slang_spec_void)
- if (!sizeof_variable (A, &fun->header.type.specifier, slang_qual_none, NULL, &param_size))
+ if (!sizeof_variable (A, &fun->header.type.specifier, slang_qual_none, 0, &param_size))
return GL_FALSE;
A->local.ret_size = param_size;
@@ -344,7 +344,7 @@ GLboolean _slang_assemble_function (slang_assemble_ctx *A, slang_function *fun)
/* execute the function body */
A->file->code[skip].param[0] = A->file->count;
- if (!_slang_assemble_operation_ (A, fun->body, /*slang_ref_freelance*/slang_ref_forbid))
+ if (!_slang_assemble_operation (A, fun->body, /*slang_ref_freelance*/slang_ref_forbid))
return GL_FALSE;
/* this is the end of the function - restore the old function frame */
@@ -363,7 +363,7 @@ GLboolean _slang_assemble_function (slang_assemble_ctx *A, slang_function *fun)
return GL_TRUE;
}
-GLboolean _slang_cleanup_stack_ (slang_assemble_ctx *A, slang_operation *op)
+GLboolean _slang_cleanup_stack (slang_assemble_ctx *A, slang_operation *op)
{
slang_assembly_typeinfo ti;
GLuint size = 0;
@@ -371,7 +371,7 @@ GLboolean _slang_cleanup_stack_ (slang_assemble_ctx *A, slang_operation *op)
/* get type info of the operation and calculate its size */
if (!slang_assembly_typeinfo_construct (&ti))
return GL_FALSE;
- if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))
+ if (!_slang_typeof_operation (A, op, &ti))
{
slang_assembly_typeinfo_destruct (&ti);
return GL_FALSE;
@@ -379,7 +379,7 @@ GLboolean _slang_cleanup_stack_ (slang_assemble_ctx *A, slang_operation *op)
if (ti.spec.type != slang_spec_void)
if (A->ref == slang_ref_force)
size = 4;
- else if (!sizeof_variable (A, &ti.spec, slang_qual_none, NULL, &size))
+ else if (!sizeof_variable (A, &ti.spec, slang_qual_none, 0, &size))
{
slang_assembly_typeinfo_destruct (&ti);
return GL_FALSE;
@@ -478,13 +478,13 @@ GLboolean _slang_dereference (slang_assemble_ctx *A, slang_operation *op)
/* get type information of the given operation */
if (!slang_assembly_typeinfo_construct (&ti))
return GL_FALSE;
- if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))
+ if (!_slang_typeof_operation (A, op, &ti))
goto end1;
/* construct aggregate from the type info */
if (!slang_storage_aggregate_construct (&agg))
goto end1;
- if (!_slang_aggregate_variable (&agg, &ti.spec, ti.array_size, A->space.funcs, A->space.structs,
+ if (!_slang_aggregate_variable (&agg, &ti.spec, ti.array_len, A->space.funcs, A->space.structs,
A->space.vars, A->mach, A->file, A->atoms))
goto end;
@@ -515,7 +515,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *A, slang_function *
{
GLuint ret_size = 0;
- if (!sizeof_variable (A, &fun->header.type.specifier, slang_qual_none, NULL, &ret_size))
+ if (!sizeof_variable (A, &fun->header.type.specifier, slang_qual_none, 0, &ret_size))
return GL_FALSE;
if (!PLAB (A->file, slang_asm_local_alloc, ret_size))
return GL_FALSE;
@@ -530,7 +530,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *A, slang_function *
if (!PLAB2 (A->file, slang_asm_local_addr, A->local.addr_tmp, 4))
return GL_FALSE;
/* TODO: optimize the "out" parameter case */
- if (!_slang_assemble_operation_ (A, &params[i], slang_ref_force))
+ if (!_slang_assemble_operation (A, &params[i], slang_ref_force))
return GL_FALSE;
p_swz[i] = A->swz;
p_ref[i] = A->ref;
@@ -551,7 +551,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *A, slang_function *
}
else
{
- if (!_slang_assemble_operation_ (A, &params[i], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &params[i], slang_ref_forbid))
return GL_FALSE;
p_swz[i] = A->swz;
p_ref[i] = A->ref;
@@ -583,7 +583,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *A, slang_function *
else
{
/* pop the value of the parameter */
- if (!_slang_cleanup_stack_ (A, &params[j]))
+ if (!_slang_cleanup_stack (A, &params[j]))
return GL_FALSE;
}
}
@@ -646,6 +646,7 @@ static const struct
{ "float_noise3", slang_asm_float_noise3, slang_asm_float_copy },
{ "float_noise4", slang_asm_float_noise4, slang_asm_float_copy },
{ "int_to_float", slang_asm_int_to_float, slang_asm_float_copy },
+ { "vec4_tex2d", slang_asm_vec4_tex2d, slang_asm_none },
/* mesa-specific extensions */
{ "float_print", slang_asm_float_deref, slang_asm_float_print },
{ "int_print", slang_asm_int_deref, slang_asm_int_print },
@@ -721,13 +722,13 @@ static GLboolean equality (slang_assemble_ctx *A, slang_operation *op, GLboolean
/* get type of operation */
if (!slang_assembly_typeinfo_construct (&ti))
return GL_FALSE;
- if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))
+ if (!_slang_typeof_operation (A, op, &ti))
goto end1;
/* convert it to an aggregate */
if (!slang_storage_aggregate_construct (&agg))
goto end1;
- if (!_slang_aggregate_variable (&agg, &ti.spec, NULL, A->space.funcs, A->space.structs,
+ if (!_slang_aggregate_variable (&agg, &ti.spec, 0, A->space.funcs, A->space.structs,
A->space.vars, A->mach, A->file, A->atoms))
goto end;
@@ -784,19 +785,19 @@ static GLboolean handle_subscript (slang_assemble_ctx *A, slang_assembly_typeinf
GLuint asize = 0, esize = 0;
/* get type info of the master expression (matrix, vector or an array */
- if (!_slang_typeof_operation (&op->children[0], &A->space, tia, A->atoms))
+ if (!_slang_typeof_operation (A, &op->children[0], tia))
return GL_FALSE;
- if (!sizeof_variable (A, &tia->spec, slang_qual_none, tia->array_size, &asize))
+ if (!sizeof_variable (A, &tia->spec, slang_qual_none, tia->array_len, &asize))
return GL_FALSE;
/* get type info of the result (matrix column, vector row or array element) */
- if (!_slang_typeof_operation (op, &A->space, tie, A->atoms))
+ if (!_slang_typeof_operation (A, op, tie))
return GL_FALSE;
- if (!sizeof_variable (A, &tie->spec, slang_qual_none, NULL, &esize))
+ if (!sizeof_variable (A, &tie->spec, slang_qual_none, 0, &esize))
return GL_FALSE;
/* assemble the master expression */
- if (!_slang_assemble_operation_ (A, &op->children[0], ref))
+ if (!_slang_assemble_operation (A, &op->children[0], ref))
return GL_FALSE;
/* when indexing an l-value swizzle, push the swizzle_tmp */
@@ -805,7 +806,7 @@ static GLboolean handle_subscript (slang_assemble_ctx *A, slang_assembly_typeinf
return GL_FALSE;
/* assemble the subscript expression */
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
if (ref == slang_ref_force && tia->is_swizzled)
@@ -882,11 +883,11 @@ static GLboolean handle_field (slang_assemble_ctx *A, slang_assembly_typeinfo *t
slang_assembly_typeinfo *tib, slang_operation *op, slang_ref_type ref)
{
/* get type info of the result (field or swizzle) */
- if (!_slang_typeof_operation (op, &A->space, tia, A->atoms))
+ if (!_slang_typeof_operation (A, op, tia))
return GL_FALSE;
/* get type info of the master expression being accessed (struct or vector) */
- if (!_slang_typeof_operation (&op->children[0], &A->space, tib, A->atoms))
+ if (!_slang_typeof_operation (A, &op->children[0], tib))
return GL_FALSE;
/* if swizzling a vector in-place, the swizzle temporary is needed */
@@ -895,7 +896,7 @@ static GLboolean handle_field (slang_assemble_ctx *A, slang_assembly_typeinfo *t
return GL_FALSE;
/* assemble the master expression */
- if (!_slang_assemble_operation_ (A, &op->children[0], ref))
+ if (!_slang_assemble_operation (A, &op->children[0], ref))
return GL_FALSE;
/* assemble the field expression */
@@ -941,7 +942,7 @@ static GLboolean handle_field (slang_assemble_ctx *A, slang_assembly_typeinfo *t
field = &tib->spec._struct->fields->variables[i];
if (!slang_storage_aggregate_construct (&agg))
return GL_FALSE;
- if (!_slang_aggregate_variable (&agg, &field->type.specifier, field->array_size,
+ if (!_slang_aggregate_variable (&agg, &field->type.specifier, field->array_len,
A->space.funcs, A->space.structs, A->space.vars, A->mach, A->file, A->atoms))
{
slang_storage_aggregate_destruct (&agg);
@@ -989,14 +990,8 @@ static GLboolean handle_field (slang_assemble_ctx *A, slang_assembly_typeinfo *t
return GL_TRUE;
}
-GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op, slang_ref_type ref)
+GLboolean _slang_assemble_operation (slang_assemble_ctx *A, slang_operation *op, slang_ref_type ref)
{
- GLuint assem;
-
- assem = A->file->count;
- if (!push_new (A->file))
- return GL_FALSE;
-
/* set default results */
A->ref = /*(ref == slang_ref_freelance) ? slang_ref_force : */ref;
A->swz.num_components = 0;
@@ -1010,9 +1005,9 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
for (i = 0; i < op->num_children; i++)
{
- if (!_slang_assemble_operation_ (A, &op->children[i], slang_ref_forbid/*slang_ref_freelance*/))
+ if (!_slang_assemble_operation (A, &op->children[i], slang_ref_forbid/*slang_ref_freelance*/))
return GL_FALSE;
- if (!_slang_cleanup_stack_ (A, &op->children[i]))
+ if (!_slang_cleanup_stack (A, &op->children[i]))
return GL_FALSE;
}
}
@@ -1032,25 +1027,26 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
{
GLuint i;
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_force))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_force))
return GL_FALSE;
for (i = 1; i < op->num_children; i++)
- if (!_slang_assemble_operation_ (A, &op->children[i], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[i], slang_ref_forbid))
return GL_FALSE;
if (!call_asm_instruction (A, op->a_id))
return GL_FALSE;
}
break;
case slang_oper_break:
- A->file->code[assem].type = slang_asm_jump;
- A->file->code[assem].param[0] = A->flow.loop_end;
+ if (!PLAB (A->file, slang_asm_jump, A->flow.loop_end))
+ return GL_FALSE;
break;
case slang_oper_continue:
- A->file->code[assem].type = slang_asm_jump;
- A->file->code[assem].param[0] = A->flow.loop_start;
+ if (!PLAB (A->file, slang_asm_jump, A->flow.loop_start))
+ return GL_FALSE;
break;
case slang_oper_discard:
- A->file->code[assem].type = slang_asm_discard;
+ if (!PUSH (A->file, slang_asm_discard))
+ return GL_FALSE;
if (!PUSH (A->file, slang_asm_exit))
return GL_FALSE;
break;
@@ -1060,7 +1056,7 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
/* push the result's address */
if (!PLAB2 (A->file, slang_asm_local_addr, 0, A->local.ret_size))
return GL_FALSE;
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))
return GL_FALSE;
A->swz.num_components = 0;
@@ -1077,7 +1073,7 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
case slang_oper_expression:
if (ref == slang_ref_force)
return GL_FALSE;
- if (!_slang_assemble_operation_ (A, &op->children[0], ref))
+ if (!_slang_assemble_operation (A, &op->children[0], ref))
return GL_FALSE;
break;
case slang_oper_if:
@@ -1101,22 +1097,22 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
case slang_oper_literal_bool:
if (ref == slang_ref_force)
return GL_FALSE;
- A->file->code[assem].type = slang_asm_bool_push;
- A->file->code[assem].literal = op->literal;
+ if (!PLIT (A->file, slang_asm_bool_push, op->literal))
+ return GL_FALSE;
A->ref = slang_ref_forbid;
break;
case slang_oper_literal_int:
if (ref == slang_ref_force)
return GL_FALSE;
- A->file->code[assem].type = slang_asm_int_push;
- A->file->code[assem].literal = op->literal;
+ if (!PLIT (A->file, slang_asm_int_push, op->literal))
+ return GL_FALSE;
A->ref = slang_ref_forbid;
break;
case slang_oper_literal_float:
if (ref == slang_ref_force)
return GL_FALSE;
- A->file->code[assem].type = slang_asm_float_push;
- A->file->code[assem].literal = op->literal;
+ if (!PLIT (A->file, slang_asm_float_push, op->literal))
+ return GL_FALSE;
A->ref = slang_ref_forbid;
break;
case slang_oper_identifier:
@@ -1129,7 +1125,7 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
if (var == NULL)
return GL_FALSE;
size = 0;
- if (!sizeof_variable (A, &var->type.specifier, slang_qual_none, var->array_size, &size))
+ if (!sizeof_variable (A, &var->type.specifier, slang_qual_none, var->array_len, &size))
return GL_FALSE;
/* prepare stack for dereferencing */
@@ -1164,11 +1160,11 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
case slang_oper_sequence:
if (ref == slang_ref_force)
return GL_FALSE;
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))
return GL_FALSE;
- if (!_slang_cleanup_stack_ (A, &op->children[0]))
+ if (!_slang_cleanup_stack (A, &op->children[0]))
return GL_FALSE;
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
A->ref = slang_ref_forbid;
break;
@@ -1265,18 +1261,18 @@ GLboolean _slang_assemble_operation_ (slang_assemble_ctx *A, slang_operation *op
A->ref = slang_ref_forbid;
break;
case slang_oper_equal:
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))
return GL_FALSE;
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
if (!equality (A, op->children, GL_TRUE))
return GL_FALSE;
A->ref = slang_ref_forbid;
break;
case slang_oper_notequal:
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))
return GL_FALSE;
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
if (!equality (A, op->children, GL_FALSE))
return GL_FALSE;
diff --git a/src/mesa/shader/slang/slang_assemble.h b/src/mesa/shader/slang/slang_assemble.h
index ec273aa308c..99c407d75ae 100644
--- a/src/mesa/shader/slang/slang_assemble.h
+++ b/src/mesa/shader/slang/slang_assemble.h
@@ -73,6 +73,7 @@ typedef enum slang_assembly_type_
slang_asm_addr_deref,
slang_asm_addr_add,
slang_asm_addr_multiply,
+ slang_asm_vec4_tex2d,
slang_asm_jump,
slang_asm_jump_if_zero,
slang_asm_enter,
@@ -179,7 +180,7 @@ slang_function *_slang_locate_function (slang_function_scope *funcs, slang_atom
GLboolean _slang_assemble_function (slang_assemble_ctx *, struct slang_function_ *);
-GLboolean _slang_cleanup_stack_ (slang_assemble_ctx *, slang_operation *);
+GLboolean _slang_cleanup_stack (slang_assemble_ctx *, slang_operation *);
GLboolean _slang_dereference (slang_assemble_ctx *, slang_operation *);
@@ -189,7 +190,7 @@ GLboolean _slang_assemble_function_call (slang_assemble_ctx *, slang_function *,
GLboolean _slang_assemble_function_call_name (slang_assemble_ctx *, const char *, slang_operation *,
GLuint, GLboolean);
-GLboolean _slang_assemble_operation_ (slang_assemble_ctx *, struct slang_operation_ *, slang_ref_type);
+GLboolean _slang_assemble_operation (slang_assemble_ctx *, struct slang_operation_ *, slang_ref_type);
#ifdef __cplusplus
}
diff --git a/src/mesa/shader/slang/slang_assemble_assignment.c b/src/mesa/shader/slang/slang_assemble_assignment.c
index 186c4886f70..d4799b05be1 100644
--- a/src/mesa/shader/slang/slang_assemble_assignment.c
+++ b/src/mesa/shader/slang/slang_assemble_assignment.c
@@ -127,12 +127,12 @@ GLboolean _slang_assemble_assignment (slang_assemble_ctx *A, slang_operation *op
if (!slang_assembly_typeinfo_construct (&ti))
return GL_FALSE;
- if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))
+ if (!_slang_typeof_operation (A, op, &ti))
goto end1;
if (!slang_storage_aggregate_construct (&agg))
goto end1;
- if (!_slang_aggregate_variable (&agg, &ti.spec, NULL, A->space.funcs, A->space.structs,
+ if (!_slang_aggregate_variable (&agg, &ti.spec, 0, A->space.funcs, A->space.structs,
A->space.vars, A->mach, A->file, A->atoms))
goto end;
@@ -167,10 +167,10 @@ GLboolean _slang_assemble_assign (slang_assemble_ctx *A, slang_operation *op, co
if (slang_string_compare ("=", oper) == 0)
{
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_force))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_force))
return GL_FALSE;
swz = A->swz;
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
A->swz = swz;
if (!_slang_assemble_assignment (A, op->children))
diff --git a/src/mesa/shader/slang/slang_assemble_conditional.c b/src/mesa/shader/slang/slang_assemble_conditional.c
index 067a5bf9417..115e292609e 100644
--- a/src/mesa/shader/slang/slang_assemble_conditional.c
+++ b/src/mesa/shader/slang/slang_assemble_conditional.c
@@ -52,7 +52,7 @@ GLboolean _slang_assemble_logicaland (slang_assemble_ctx *A, slang_operation *op
GLuint zero_jump, end_jump;
/* evaluate left expression */
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))
return GL_FALSE;
/* jump to pushing 0 if not true */
@@ -61,7 +61,7 @@ GLboolean _slang_assemble_logicaland (slang_assemble_ctx *A, slang_operation *op
return GL_FALSE;
/* evaluate right expression */
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
/* jump to the end of the expression */
@@ -98,7 +98,7 @@ GLboolean _slang_assemble_logicalor (slang_assemble_ctx *A, slang_operation *op)
GLuint right_jump, end_jump;
/* evaluate left expression */
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))
return GL_FALSE;
/* jump to evaluation of right expression if not true */
@@ -117,7 +117,7 @@ GLboolean _slang_assemble_logicalor (slang_assemble_ctx *A, slang_operation *op)
/* evaluate right expression */
A->file->code[right_jump].param[0] = A->file->count;
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
/* the end of the expression */
@@ -144,7 +144,7 @@ GLboolean _slang_assemble_select (slang_assemble_ctx *A, slang_operation *op)
GLuint cond_jump, end_jump;
/* execute condition expression */
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))
return GL_FALSE;
/* jump to false expression if not true */
@@ -153,7 +153,7 @@ GLboolean _slang_assemble_select (slang_assemble_ctx *A, slang_operation *op)
return GL_FALSE;
/* execute true expression */
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
/* jump to the end of the expression */
@@ -165,7 +165,7 @@ GLboolean _slang_assemble_select (slang_assemble_ctx *A, slang_operation *op)
A->file->code[cond_jump].param[0] = A->file->count;
/* execute false expression */
- if (!_slang_assemble_operation_ (A, &op->children[2], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[2], slang_ref_forbid))
return GL_FALSE;
/* resolve the end of the expression */
@@ -199,9 +199,9 @@ GLboolean _slang_assemble_for (slang_assemble_ctx *A, slang_operation *op)
slang_assembly_flow_control save_flow = A->flow;
/* execute initialization statement */
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))
return GL_FALSE;
- if (!_slang_cleanup_stack_ (A, &op->children[0]))
+ if (!_slang_cleanup_stack (A, &op->children[0]))
return GL_FALSE;
/* skip the "go to the end of the loop" and loop-increment statements */
@@ -219,16 +219,16 @@ GLboolean _slang_assemble_for (slang_assemble_ctx *A, slang_operation *op)
cont_label = A->file->count;
/* execute loop-increment statement */
- if (!_slang_assemble_operation_ (A, &op->children[2], slang_ref_forbid/*slang_ref_freelance*/))
+ if (!_slang_assemble_operation (A, &op->children[2], slang_ref_forbid/*slang_ref_freelance*/))
return GL_FALSE;
- if (!_slang_cleanup_stack_ (A, &op->children[2]))
+ if (!_slang_cleanup_stack (A, &op->children[2]))
return GL_FALSE;
/* resolve the condition point */
A->file->code[start_jump].param[0] = A->file->count;
/* execute condition statement */
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
/* jump to the end of the loop if not true */
@@ -239,9 +239,9 @@ GLboolean _slang_assemble_for (slang_assemble_ctx *A, slang_operation *op)
/* execute loop body */
A->flow.loop_start = cont_label;
A->flow.loop_end = break_label;
- if (!_slang_assemble_operation_ (A, &op->children[3], slang_ref_forbid/*slang_ref_freelance*/))
+ if (!_slang_assemble_operation (A, &op->children[3], slang_ref_forbid/*slang_ref_freelance*/))
return GL_FALSE;
- if (!_slang_cleanup_stack_ (A, &op->children[3]))
+ if (!_slang_cleanup_stack (A, &op->children[3]))
return GL_FALSE;
A->flow = save_flow;
@@ -303,9 +303,9 @@ GLboolean _slang_assemble_do (slang_assemble_ctx *A, slang_operation *op)
/* execute loop body */
A->flow.loop_start = cont_label;
A->flow.loop_end = break_label;
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid/*slang_ref_freelance*/))
return GL_FALSE;
- if (!_slang_cleanup_stack_ (A, &op->children[0]))
+ if (!_slang_cleanup_stack (A, &op->children[0]))
return GL_FALSE;
A->flow = save_flow;
@@ -313,7 +313,7 @@ GLboolean _slang_assemble_do (slang_assemble_ctx *A, slang_operation *op)
A->file->code[cont_jump].param[0] = A->file->count;
/* execute condition statement */
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid))
return GL_FALSE;
/* jump to the end of the loop if not true */
@@ -368,7 +368,7 @@ GLboolean _slang_assemble_while (slang_assemble_ctx *A, slang_operation *op)
A->file->code[skip_jump].param[0] = A->file->count;
/* execute condition statement */
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))
return GL_FALSE;
/* jump to the end of the loop if not true */
@@ -379,9 +379,9 @@ GLboolean _slang_assemble_while (slang_assemble_ctx *A, slang_operation *op)
/* execute loop body */
A->flow.loop_start = A->file->code[skip_jump].param[0];
A->flow.loop_end = break_label;
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid/*slang_ref_freelance*/))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid/*slang_ref_freelance*/))
return GL_FALSE;
- if (!_slang_cleanup_stack_ (A, &op->children[1]))
+ if (!_slang_cleanup_stack (A, &op->children[1]))
return GL_FALSE;
A->flow = save_flow;
@@ -414,7 +414,7 @@ GLboolean _slang_assemble_if (slang_assemble_ctx *A, slang_operation *op)
GLuint cond_jump, else_jump;
/* execute condition statement */
- if (!_slang_assemble_operation_ (A, &op->children[0], slang_ref_forbid))
+ if (!_slang_assemble_operation (A, &op->children[0], slang_ref_forbid))
return GL_FALSE;
/* jump to false-statement if not true */
@@ -423,9 +423,9 @@ GLboolean _slang_assemble_if (slang_assemble_ctx *A, slang_operation *op)
return GL_FALSE;
/* execute true-statement */
- if (!_slang_assemble_operation_ (A, &op->children[1], slang_ref_forbid/*slang_ref_freelance*/))
+ if (!_slang_assemble_operation (A, &op->children[1], slang_ref_forbid/*slang_ref_freelance*/))
return GL_FALSE;
- if (!_slang_cleanup_stack_ (A, &op->children[1]))
+ if (!_slang_cleanup_stack (A, &op->children[1]))
return GL_FALSE;
/* skip if-false statement */
@@ -437,9 +437,9 @@ GLboolean _slang_assemble_if (slang_assemble_ctx *A, slang_operation *op)
A->file->code[cond_jump].param[0] = A->file->count;
/* execute false-statement */
- if (!_slang_assemble_operation_ (A, &op->children[2], slang_ref_forbid/*slang_ref_freelance*/))
+ if (!_slang_assemble_operation (A, &op->children[2], slang_ref_forbid/*slang_ref_freelance*/))
return GL_FALSE;
- if (!_slang_cleanup_stack_ (A, &op->children[2]))
+ if (!_slang_cleanup_stack (A, &op->children[2]))
return GL_FALSE;
/* resolve end of if-false statement */
diff --git a/src/mesa/shader/slang/slang_assemble_constructor.c b/src/mesa/shader/slang/slang_assemble_constructor.c
index d7d2e422d31..278d490d9d2 100644
--- a/src/mesa/shader/slang/slang_assemble_constructor.c
+++ b/src/mesa/shader/slang/slang_assemble_constructor.c
@@ -155,12 +155,12 @@ static GLboolean constructor_aggregate (slang_assemble_ctx *A, const slang_stora
if (!slang_assembly_typeinfo_construct (&ti))
return GL_FALSE;
- if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))
+ if (!_slang_typeof_operation (A, op, &ti))
goto end1;
if (!slang_storage_aggregate_construct (&agg))
goto end1;
- if (!_slang_aggregate_variable (&agg, &ti.spec, NULL, A->space.funcs, A->space.structs,
+ if (!_slang_aggregate_variable (&agg, &ti.spec, 0, A->space.funcs, A->space.structs,
A->space.vars, A->mach, A->file, A->atoms))
goto end2;
@@ -169,7 +169,7 @@ static GLboolean constructor_aggregate (slang_assemble_ctx *A, const slang_stora
if (!_slang_flatten_aggregate (&flat_agg, &agg))
goto end;
- if (!_slang_assemble_operation_ (A, op, slang_ref_forbid))
+ if (!_slang_assemble_operation (A, op, slang_ref_forbid))
goto end;
for (i = 0; i < flat_agg.count; i++)
@@ -205,13 +205,13 @@ GLboolean _slang_assemble_constructor (slang_assemble_ctx *A, slang_operation *o
/* get typeinfo of the constructor (the result of constructor expression) */
if (!slang_assembly_typeinfo_construct (&ti))
return GL_FALSE;
- if (!_slang_typeof_operation (op, &A->space, &ti, A->atoms))
+ if (!_slang_typeof_operation (A, op, &ti))
goto end1;
/* create an aggregate of the constructor */
if (!slang_storage_aggregate_construct (&agg))
goto end1;
- if (!_slang_aggregate_variable (&agg, &ti.spec, NULL, A->space.funcs, A->space.structs,
+ if (!_slang_aggregate_variable (&agg, &ti.spec, 0, A->space.funcs, A->space.structs,
A->space.vars, A->mach, A->file, A->atoms))
goto end2;
diff --git a/src/mesa/shader/slang/slang_assemble_typeinfo.c b/src/mesa/shader/slang/slang_assemble_typeinfo.c
index 2fcdd33718b..48fba8ff612 100644
--- a/src/mesa/shader/slang/slang_assemble_typeinfo.c
+++ b/src/mesa/shader/slang/slang_assemble_typeinfo.c
@@ -38,14 +38,13 @@ GLboolean slang_assembly_typeinfo_construct (slang_assembly_typeinfo *ti)
{
if (!slang_type_specifier_construct (&ti->spec))
return GL_FALSE;
- ti->array_size = NULL;
+ ti->array_len = 0;
return GL_TRUE;
}
GLvoid slang_assembly_typeinfo_destruct (slang_assembly_typeinfo *ti)
{
slang_type_specifier_destruct (&ti->spec);
- /* do not free ti->array_size */
}
/* _slang_typeof_operation() */
@@ -63,7 +62,13 @@ static GLboolean typeof_existing_function (const char *name, slang_operation *pa
return exists;
}
-GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_space *space,
+GLboolean _slang_typeof_operation (slang_assemble_ctx *A, slang_operation *op,
+ slang_assembly_typeinfo *ti)
+{
+ return _slang_typeof_operation_ (op, &A->space, ti, A->atoms);
+}
+
+GLboolean _slang_typeof_operation_ (slang_operation *op, slang_assembly_name_space *space,
slang_assembly_typeinfo *ti, slang_atom_pool *atoms)
{
ti->can_be_referenced = GL_FALSE;
@@ -94,7 +99,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
case slang_oper_divassign:
case slang_oper_preincrement:
case slang_oper_predecrement:
- if (!_slang_typeof_operation (op->children, space, ti, atoms))
+ if (!_slang_typeof_operation_ (op->children, space, ti, atoms))
return 0;
break;
case slang_oper_literal_bool:
@@ -126,12 +131,12 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
if (!slang_type_specifier_copy (&ti->spec, &var->type.specifier))
return GL_FALSE;
ti->can_be_referenced = GL_TRUE;
- ti->array_size = var->array_size;
+ ti->array_len = var->array_len;
}
break;
case slang_oper_sequence:
/* TODO: check [0] and [1] if they match */
- if (!_slang_typeof_operation (&op->children[1], space, ti, atoms))
+ if (!_slang_typeof_operation_ (&op->children[1], space, ti, atoms))
return GL_FALSE;
ti->can_be_referenced = GL_FALSE;
ti->is_swizzled = GL_FALSE;
@@ -144,7 +149,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
/*case slang_oper_andassign:*/
case slang_oper_select:
/* TODO: check [1] and [2] if they match */
- if (!_slang_typeof_operation (&op->children[1], space, ti, atoms))
+ if (!_slang_typeof_operation_ (&op->children[1], space, ti, atoms))
return GL_FALSE;
ti->can_be_referenced = GL_FALSE;
ti->is_swizzled = GL_FALSE;
@@ -172,7 +177,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
break;
/*case slang_oper_modulus:*/
case slang_oper_plus:
- if (!_slang_typeof_operation (op->children, space, ti, atoms))
+ if (!_slang_typeof_operation_ (op->children, space, ti, atoms))
return GL_FALSE;
ti->can_be_referenced = GL_FALSE;
ti->is_swizzled = GL_FALSE;
@@ -188,7 +193,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
if (!slang_assembly_typeinfo_construct (&_ti))
return GL_FALSE;
- if (!_slang_typeof_operation (op->children, space, &_ti, atoms))
+ if (!_slang_typeof_operation_ (op->children, space, &_ti, atoms))
{
slang_assembly_typeinfo_destruct (&_ti);
return GL_FALSE;
@@ -259,7 +264,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
if (!slang_assembly_typeinfo_construct (&_ti))
return GL_FALSE;
- if (!_slang_typeof_operation (op->children, space, &_ti, atoms))
+ if (!_slang_typeof_operation_ (op->children, space, &_ti, atoms))
{
slang_assembly_typeinfo_destruct (&_ti);
return GL_FALSE;
@@ -374,7 +379,7 @@ GLboolean _slang_typeof_operation (slang_operation *op, slang_assembly_name_spac
break;
case slang_oper_postincrement:
case slang_oper_postdecrement:
- if (!_slang_typeof_operation (op->children, space, ti, atoms))
+ if (!_slang_typeof_operation_ (op->children, space, ti, atoms))
return GL_FALSE;
ti->can_be_referenced = GL_FALSE;
ti->is_swizzled = GL_FALSE;
diff --git a/src/mesa/shader/slang/slang_assemble_typeinfo.h b/src/mesa/shader/slang/slang_assemble_typeinfo.h
index 9f32b4c6456..b189dbed734 100644
--- a/src/mesa/shader/slang/slang_assemble_typeinfo.h
+++ b/src/mesa/shader/slang/slang_assemble_typeinfo.h
@@ -38,7 +38,7 @@ typedef struct slang_assembly_typeinfo_
GLboolean is_swizzled;
slang_swizzle swz;
slang_type_specifier spec;
- slang_operation *array_size;
+ GLuint array_len;
} slang_assembly_typeinfo;
GLboolean slang_assembly_typeinfo_construct (slang_assembly_typeinfo *);
@@ -49,7 +49,8 @@ GLvoid slang_assembly_typeinfo_destruct (slang_assembly_typeinfo *);
* Returns GL_TRUE on success.
* Returns GL_FALSE otherwise.
*/
-GLboolean _slang_typeof_operation (slang_operation *, slang_assembly_name_space *,
+GLboolean _slang_typeof_operation (slang_assemble_ctx *, slang_operation *, slang_assembly_typeinfo *);
+GLboolean _slang_typeof_operation_ (slang_operation *, slang_assembly_name_space *,
slang_assembly_typeinfo *, slang_atom_pool *);
/*
diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c
index 808cf9b82a0..54aca6dd79d 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -134,7 +134,9 @@ int slang_translation_unit_construct2 (slang_translation_unit *unit, slang_assem
unit->machine = mach;
unit->free_machine = 0;
unit->atom_pool = atoms;
- unit->free_atom_pool = 0;
+ unit->free_atom_pool = 0;
+ slang_export_data_table_ctr (&unit->exp_data);
+ slang_active_uniforms_ctr (&unit->uniforms);
return 1;
}
@@ -156,7 +158,9 @@ void slang_translation_unit_destruct (slang_translation_unit *unit)
{
slang_atom_pool_destruct (unit->atom_pool);
slang_alloc_free (unit->atom_pool);
- }
+ }
+ slang_active_uniforms_dtr (&unit->uniforms);
+ slang_export_data_table_dtr (&unit->exp_data);
}
/* slang_info_log */
@@ -349,44 +353,99 @@ static int check_revision (slang_parse_ctx *C)
static int parse_statement (slang_parse_ctx *, slang_output_ctx *, slang_operation *);
static int parse_expression (slang_parse_ctx *, slang_output_ctx *, slang_operation *);
-static int parse_type_specifier (slang_parse_ctx *, slang_output_ctx *, slang_type_specifier *);
+static int parse_type_specifier (slang_parse_ctx *, slang_output_ctx *, slang_type_specifier *);
+
+static GLboolean parse_array_len (slang_parse_ctx *C, slang_output_ctx *O, GLuint *len)
+{
+ slang_operation array_size;
+ slang_assembly_name_space space;
+ GLboolean result;
+
+ if (!slang_operation_construct (&array_size))
+ return GL_FALSE;
+ if (!parse_expression (C, O, &array_size))
+ {
+ slang_operation_destruct (&array_size);
+ return GL_FALSE;
+ }
+
+ space.funcs = O->funs;
+ space.structs = O->structs;
+ space.vars = O->vars;
+ result = _slang_evaluate_int (O->assembly, O->machine, &space, &array_size, len, C->atoms);
+ slang_operation_destruct (&array_size);
+ return result;
+}
+
+static GLboolean calculate_var_size (slang_parse_ctx *C, slang_output_ctx *O, slang_variable *var)
+{
+ slang_storage_aggregate agg;
+
+ if (!slang_storage_aggregate_construct (&agg))
+ return GL_FALSE;
+ if (!_slang_aggregate_variable (&agg, &var->type.specifier, var->array_len, O->funs, O->structs,
+ O->vars, O->machine, O->assembly, C->atoms))
+ {
+ slang_storage_aggregate_destruct (&agg);
+ return GL_FALSE;
+ }
+ var->size = _slang_sizeof_aggregate (&agg);
+ slang_storage_aggregate_destruct (&agg);
+ return GL_TRUE;
+}
+
+static GLboolean convert_to_array (slang_parse_ctx *C, slang_variable *var,
+ const slang_type_specifier *sp)
+{
+ /* sized array - mark it as array, copy the specifier to the array element and
+ * parse the expression */
+ var->type.specifier.type = slang_spec_array;
+ var->type.specifier._array = (slang_type_specifier *) slang_alloc_malloc (sizeof (
+ slang_type_specifier));
+ if (var->type.specifier._array == NULL)
+ {
+ slang_info_log_memory (C->L);
+ return GL_FALSE;
+ }
+ if (!slang_type_specifier_construct (var->type.specifier._array))
+ {
+ slang_alloc_free (var->type.specifier._array);
+ var->type.specifier._array = NULL;
+ slang_info_log_memory (C->L);
+ return GL_FALSE;
+ }
+ return slang_type_specifier_copy (var->type.specifier._array, sp);
+}
/* structure field */
#define FIELD_NONE 0
#define FIELD_NEXT 1
#define FIELD_ARRAY 2
-static int parse_struct_field_var (slang_parse_ctx *C, slang_output_ctx *O, slang_variable *var)
-{
+static GLboolean parse_struct_field_var (slang_parse_ctx *C, slang_output_ctx *O, slang_variable *var,
+ const slang_type_specifier *sp)
+{
var->a_name = parse_identifier (C);
if (var->a_name == SLANG_ATOM_NULL)
- return 0;
+ return GL_FALSE;
switch (*C->I++)
{
- case FIELD_NONE:
+ case FIELD_NONE:
+ if (!slang_type_specifier_copy (&var->type.specifier, sp))
+ return GL_FALSE;
break;
- case FIELD_ARRAY:
- var->array_size = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));
- if (var->array_size == NULL)
- {
- slang_info_log_memory (C->L);
- return 0;
- }
- if (!slang_operation_construct (var->array_size))
- {
- slang_alloc_free (var->array_size);
- var->array_size = NULL;
- return 0;
- }
- if (!parse_expression (C, O, var->array_size))
- return 0;
+ case FIELD_ARRAY:
+ if (!convert_to_array (C, var, sp))
+ return GL_FALSE;
+ if (!parse_array_len (C, O, &var->array_len))
+ return GL_FALSE;
break;
default:
- return 0;
+ return GL_FALSE;
}
- return 1;
+ return calculate_var_size (C, O, var);
}
static int parse_struct_field (slang_parse_ctx *C, slang_output_ctx *O, slang_struct *st,
@@ -413,9 +472,7 @@ static int parse_struct_field (slang_parse_ctx *C, slang_output_ctx *O, slang_st
if (!slang_variable_construct (var))
return 0;
st->fields->num_variables++;
- if (!slang_type_specifier_copy (&var->type.specifier, sp))
- return 0;
- if (!parse_struct_field_var (C, &o, var))
+ if (!parse_struct_field_var (C, &o, var, sp))
return 0;
}
while (*C->I++ != FIELD_NONE);
@@ -467,7 +524,8 @@ static int parse_struct (slang_parse_ctx *C, slang_output_ctx *O, slang_struct *
{
slang_type_specifier_destruct (&sp);
return 0;
- }
+ }
+ slang_type_specifier_destruct (&sp);
}
while (*C->I++ != FIELD_NONE);
@@ -1215,8 +1273,6 @@ static int parse_expression (slang_parse_ctx *C, slang_output_ctx *O, slang_oper
static int parse_parameter_declaration (slang_parse_ctx *C, slang_output_ctx *O,
slang_variable *param)
{
- slang_storage_aggregate agg;
-
/* parse and validate the parameter's type qualifiers (there can be two at most) because
* not all combinations are valid */
if (!parse_type_qualifier (C, &param->type.qualifier))
@@ -1261,36 +1317,30 @@ static int parse_parameter_declaration (slang_parse_ctx *C, slang_output_ctx *O,
/* if the parameter is an array, parse its size (the size must be explicitly defined */
if (*C->I++ == PARAMETER_ARRAY_PRESENT)
- {
- param->array_size = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));
- if (param->array_size == NULL)
- {
- slang_info_log_memory (C->L);
- return 0;
- }
- if (!slang_operation_construct (param->array_size))
- {
- slang_alloc_free (param->array_size);
- param->array_size = NULL;
- slang_info_log_memory (C->L);
- return 0;
- }
- if (!parse_expression (C, O, param->array_size))
- return 0;
- /* TODO: execute the array_size */
+ {
+ slang_type_specifier p;
+
+ if (!slang_type_specifier_construct (&p))
+ return GL_FALSE;
+ if (!slang_type_specifier_copy (&p, &param->type.specifier))
+ {
+ slang_type_specifier_destruct (&p);
+ return GL_FALSE;
+ }
+ if (!convert_to_array (C, param, &p))
+ {
+ slang_type_specifier_destruct (&p);
+ return GL_FALSE;
+ }
+ slang_type_specifier_destruct (&p);
+ if (!parse_array_len (C, O, &param->array_len))
+ return GL_FALSE;
}
/* calculate the parameter size */
- if (!slang_storage_aggregate_construct (&agg))
- return 0;
- if (!_slang_aggregate_variable (&agg, &param->type.specifier, param->array_size, O->funs,
- O->structs, O->vars, O->machine, O->assembly, C->atoms))
- {
- slang_storage_aggregate_destruct (&agg);
- return 0;
- }
- param->size = _slang_sizeof_aggregate (&agg);
- slang_storage_aggregate_destruct (&agg);
+ if (!calculate_var_size (C, O, param))
+ return GL_FALSE;
+
/* TODO: allocate the local address here? */
return 1;
}
@@ -1551,7 +1601,7 @@ static GLboolean initialize_global (slang_assemble_ctx *A, slang_variable *var)
op_assign.children[1] = *var->initializer;
/* insert the actual expression */
- result = _slang_assemble_operation_ (A, &op_assign, slang_ref_forbid);
+ result = _slang_assemble_operation (A, &op_assign, slang_ref_forbid);
/* carefully destroy the operations */
op_assign.num_children = 0;
@@ -1649,79 +1699,29 @@ static int parse_init_declarator (slang_parse_ctx *C, slang_output_ctx *O,
}
if (!parse_expression (C, O, var->initializer))
return 0;
- /* TODO: execute the initializer */
break;
#if 0
case VARIABLE_ARRAY_UNKNOWN:
/* unsized array - mark it as array and copy the specifier to the array element */
- var->type.specifier.type = slang_spec_array;
- var->type.specifier._array = (slang_type_specifier *) slang_alloc_malloc (sizeof (
- slang_type_specifier));
- if (var->type.specifier._array == NULL)
- {
- slang_info_log_memory (C->L);
- return 0;
- }
- slang_type_specifier_construct (var->type.specifier._array);
- if (!slang_type_specifier_copy (var->type.specifier._array, &type->specifier))
- return 0;
+ if (!convert_to_array (C, var, &type->specifier))
+ return GL_FALSE;
break;
#endif
case VARIABLE_ARRAY_EXPLICIT:
- /* sized array - mark it as array, copy the specifier to the array element and
- * parse the expression */
- var->type.specifier.type = slang_spec_array;
- var->type.specifier._array = (slang_type_specifier *) slang_alloc_malloc (sizeof (
- slang_type_specifier));
- if (var->type.specifier._array == NULL)
- {
- slang_info_log_memory (C->L);
- return 0;
- }
- if (!slang_type_specifier_construct (var->type.specifier._array))
- {
- slang_alloc_free (var->type.specifier._array);
- var->type.specifier._array = NULL;
- slang_info_log_memory (C->L);
- return 0;
- }
- if (!slang_type_specifier_copy (var->type.specifier._array, &type->specifier))
- return 0;
- var->array_size = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));
- if (var->array_size == NULL)
- {
- slang_info_log_memory (C->L);
- return 0;
- }
- if (!slang_operation_construct (var->array_size))
- {
- slang_alloc_free (var->array_size);
- var->array_size = NULL;
- slang_info_log_memory (C->L);
- return 0;
- }
- if (!parse_expression (C, O, var->array_size))
- return 0;
+ if (!convert_to_array (C, var, &type->specifier))
+ return GL_FALSE;
+ if (!parse_array_len (C, O, &var->array_len))
+ return GL_FALSE;
break;
default:
return 0;
}
/* allocate global address space for a variable with a known size */
- if (C->global_scope && !(var->type.specifier.type == slang_spec_array && var->array_size == NULL))
+ if (C->global_scope && !(var->type.specifier.type == slang_spec_array && var->array_len == 0))
{
- slang_storage_aggregate agg;
-
- if (!slang_storage_aggregate_construct (&agg))
- return 0;
- if (!_slang_aggregate_variable (&agg, &var->type.specifier, var->array_size, O->funs,
- O->structs, O->vars, O->machine, O->assembly, C->atoms))
- {
- slang_storage_aggregate_destruct (&agg);
- return 0;
- }
- var->size = _slang_sizeof_aggregate (&agg);
- slang_storage_aggregate_destruct (&agg);
+ if (!calculate_var_size (C, O, var))
+ return GL_FALSE;
var->address = slang_var_pool_alloc (O->global_pool, var->size);
}
@@ -2132,8 +2132,16 @@ int _slang_compile (const char *source, slang_translation_unit *unit, slang_unit
slang_translation_unit_destruct (&builtin_units[i]);
}*/
if (id != 0)
- grammar_destroy (id);
+ grammar_destroy (id);
+
+ if (!success)
+ return 0;
+ unit->exp_data.atoms = unit->atom_pool;
+ if (!_slang_build_export_data_table (&unit->exp_data, &unit->globals))
+ return 0;
+ if (!_slang_gather_active_uniforms (&unit->uniforms, &unit->exp_data))
+ return 0;
- return success;
+ return 1;
}
diff --git a/src/mesa/shader/slang/slang_compile.h b/src/mesa/shader/slang/slang_compile.h
index 8c7b96c9702..7695235c21c 100644
--- a/src/mesa/shader/slang/slang_compile.h
+++ b/src/mesa/shader/slang/slang_compile.h
@@ -60,7 +60,9 @@ typedef struct slang_translation_unit_
struct slang_machine_ *machine;
int free_machine;
slang_atom_pool *atom_pool;
- int free_atom_pool;
+ int free_atom_pool;
+ slang_export_data_table exp_data;
+ slang_active_uniforms uniforms;
} slang_translation_unit;
int slang_translation_unit_construct (slang_translation_unit *);
diff --git a/src/mesa/shader/slang/slang_compile_struct.c b/src/mesa/shader/slang/slang_compile_struct.c
index 0828d235989..30c15ffd5d8 100644
--- a/src/mesa/shader/slang/slang_compile_struct.c
+++ b/src/mesa/shader/slang/slang_compile_struct.c
@@ -172,9 +172,8 @@ int slang_struct_equal (const slang_struct *x, const slang_struct *y)
if (!slang_type_specifier_equal (&varx->type.specifier, &vary->type.specifier))
return 0;
if (varx->type.specifier.type == slang_spec_array)
- {
- /* TODO: compare array sizes */
- }
+ if (varx->array_len != vary->array_len)
+ return GL_FALSE;
}
return 1;
}
diff --git a/src/mesa/shader/slang/slang_compile_variable.c b/src/mesa/shader/slang/slang_compile_variable.c
index ff042bb65fc..6f56872b593 100644
--- a/src/mesa/shader/slang/slang_compile_variable.c
+++ b/src/mesa/shader/slang/slang_compile_variable.c
@@ -269,7 +269,7 @@ int slang_variable_construct (slang_variable *var)
if (!slang_fully_specified_type_construct (&var->type))
return 0;
var->a_name = SLANG_ATOM_NULL;
- var->array_size = NULL;
+ var->array_len = 0;
var->initializer = NULL;
var->address = ~0;
var->size = 0;
@@ -280,11 +280,6 @@ int slang_variable_construct (slang_variable *var)
void slang_variable_destruct (slang_variable *var)
{
slang_fully_specified_type_destruct (&var->type);
- if (var->array_size != NULL)
- {
- slang_operation_destruct (var->array_size);
- slang_alloc_free (var->array_size);
- }
if (var->initializer != NULL)
{
slang_operation_destruct (var->initializer);
@@ -304,26 +299,7 @@ int slang_variable_copy (slang_variable *x, const slang_variable *y)
return 0;
}
z.a_name = y->a_name;
- if (y->array_size != NULL)
- {
- z.array_size = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));
- if (z.array_size == NULL)
- {
- slang_variable_destruct (&z);
- return 0;
- }
- if (!slang_operation_construct (z.array_size))
- {
- slang_alloc_free (z.array_size);
- slang_variable_destruct (&z);
- return 0;
- }
- if (!slang_operation_copy (z.array_size, y->array_size))
- {
- slang_variable_destruct (&z);
- return 0;
- }
- }
+ z.array_len = y->array_len;
if (y->initializer != NULL)
{
z.initializer = (slang_operation *) slang_alloc_malloc (sizeof (slang_operation));
@@ -364,3 +340,192 @@ slang_variable *_slang_locate_variable (slang_variable_scope *scope, slang_atom
return NULL;
}
+/*
+ * slang_active_uniforms
+ */
+
+GLvoid slang_active_uniforms_ctr (slang_active_uniforms *self)
+{
+ self->table = NULL;
+ self->count = 0;
+}
+
+GLvoid slang_active_uniforms_dtr (slang_active_uniforms *self)
+{
+ GLuint i;
+
+ for (i = 0; i < self->count; i++)
+ slang_alloc_free (self->table[i].name);
+ slang_alloc_free (self->table);
+}
+
+GLboolean slang_active_uniforms_add (slang_active_uniforms *self, slang_export_data_quant *q,
+ const char *name)
+{
+ const GLuint n = self->count;
+
+ self->table = (slang_active_uniform *) slang_alloc_realloc (self->table,
+ n * sizeof (slang_active_uniform), (n + 1) * sizeof (slang_active_uniform));
+ if (self->table == NULL)
+ return GL_FALSE;
+ self->table[n].quant = q;
+ self->table[n].name = slang_string_duplicate (name);
+ if (self->table[n].name == NULL)
+ return GL_FALSE;
+ self->count++;
+ return GL_TRUE;
+}
+
+static GLenum gl_type_from_specifier (const slang_type_specifier *type)
+{
+ switch (type->type)
+ {
+ case slang_spec_bool:
+ return GL_BOOL_ARB;
+ case slang_spec_bvec2:
+ return GL_BOOL_VEC2_ARB;
+ case slang_spec_bvec3:
+ return GL_BOOL_VEC3_ARB;
+ case slang_spec_bvec4:
+ return GL_BOOL_VEC4_ARB;
+ case slang_spec_int:
+ return GL_INT;
+ case slang_spec_ivec2:
+ return GL_INT_VEC2_ARB;
+ case slang_spec_ivec3:
+ return GL_INT_VEC3_ARB;
+ case slang_spec_ivec4:
+ return GL_INT_VEC4_ARB;
+ case slang_spec_float:
+ return GL_FLOAT;
+ case slang_spec_vec2:
+ return GL_FLOAT_VEC2_ARB;
+ case slang_spec_vec3:
+ return GL_FLOAT_VEC3_ARB;
+ case slang_spec_vec4:
+ return GL_FLOAT_VEC4_ARB;
+ case slang_spec_mat2:
+ return GL_FLOAT_MAT2_ARB;
+ case slang_spec_mat3:
+ return GL_FLOAT_MAT3_ARB;
+ case slang_spec_mat4:
+ return GL_FLOAT_MAT4_ARB;
+ case slang_spec_sampler1D:
+ return GL_SAMPLER_1D_ARB;
+ case slang_spec_sampler2D:
+ return GL_SAMPLER_2D_ARB;
+ case slang_spec_sampler3D:
+ return GL_SAMPLER_3D_ARB;
+ case slang_spec_samplerCube:
+ return GL_SAMPLER_CUBE_ARB;
+ case slang_spec_sampler1DShadow:
+ return GL_SAMPLER_1D_SHADOW_ARB;
+ case slang_spec_sampler2DShadow:
+ return GL_SAMPLER_2D_SHADOW_ARB;
+ case slang_spec_array:
+ return gl_type_from_specifier (type->_array);
+ default:
+ return GL_FLOAT;
+ }
+}
+
+static GLboolean build_quant (slang_export_data_quant *q, slang_variable *var)
+{
+ slang_type_specifier *spec = &var->type.specifier;
+
+ q->name = var->a_name;
+ q->size = var->size;
+ if (spec->type == slang_spec_array)
+ {
+ q->array_len = var->array_len;
+ q->size /= var->array_len;
+ spec = spec->_array;
+ }
+ if (spec->type == slang_spec_struct)
+ {
+ GLuint i;
+
+ q->u.field_count = spec->_struct->fields->num_variables;
+ q->structure = (slang_export_data_quant *) slang_alloc_malloc (
+ q->u.field_count * sizeof (slang_export_data_quant));
+ if (q->structure == NULL)
+ return GL_FALSE;
+
+ for (i = 0; i < q->u.field_count; i++)
+ slang_export_data_quant_ctr (&q->structure[i]);
+ for (i = 0; i < q->u.field_count; i++)
+ if (!build_quant (&q->structure[i], &spec->_struct->fields->variables[i]))
+ return GL_FALSE;
+ }
+ else
+ q->u.basic_type = gl_type_from_specifier (spec);
+ return GL_TRUE;
+}
+
+GLboolean _slang_build_export_data_table (slang_export_data_table *tbl, slang_variable_scope *vars)
+{
+ GLuint i;
+
+ for (i = 0; i < vars->num_variables; i++)
+ {
+ slang_variable *var = &vars->variables[i];
+
+ if (var->type.qualifier == slang_qual_uniform)
+ {
+ slang_export_data_entry *e = slang_export_data_table_add (tbl);
+ if (e == NULL)
+ return GL_FALSE;
+ if (!build_quant (&e->quant, var))
+ return GL_FALSE;
+ e->access = slang_exp_uniform;
+ e->address = var->address;
+ }
+ }
+
+ if (vars->outer_scope != NULL)
+ return _slang_build_export_data_table (tbl, vars->outer_scope);
+ return GL_TRUE;
+}
+
+static GLboolean insert_uniform (slang_active_uniforms *u, slang_export_data_quant *q, char *name,
+ slang_atom_pool *atoms)
+{
+ slang_string_concat (name, slang_atom_pool_id (atoms, q->name));
+ if (q->array_len != 0)
+ slang_string_concat (name, "[0]");
+
+ if (q->structure != NULL)
+ {
+ GLuint save, i;
+
+ slang_string_concat (name, ".");
+ save = slang_string_length (name);
+
+ for (i = 0; i < q->u.field_count; i++)
+ {
+ if (!insert_uniform (u, &q->structure[i], name, atoms))
+ return GL_FALSE;
+ name[save] = '\0';
+ }
+
+ return GL_TRUE;
+ }
+
+ return slang_active_uniforms_add (u, q, name);
+}
+
+GLboolean _slang_gather_active_uniforms (slang_active_uniforms *u, slang_export_data_table *tbl)
+{
+ GLuint i;
+
+ for (i = 0; i < tbl->count; i++)
+ {
+ char name[1024] = "";
+
+ if (!insert_uniform (u, &tbl->entries[i].quant, name, tbl->atoms))
+ return GL_FALSE;
+ }
+
+ return GL_TRUE;
+}
+
diff --git a/src/mesa/shader/slang/slang_compile_variable.h b/src/mesa/shader/slang/slang_compile_variable.h
index 7ef83852f45..4261dd16896 100644
--- a/src/mesa/shader/slang/slang_compile_variable.h
+++ b/src/mesa/shader/slang/slang_compile_variable.h
@@ -25,6 +25,8 @@
#if !defined SLANG_COMPILE_VARIABLE_H
#define SLANG_COMPILE_VARIABLE_H
+#include "slang_export.h"
+
#if defined __cplusplus
extern "C" {
#endif
@@ -110,7 +112,7 @@ typedef struct slang_variable_
{
slang_fully_specified_type type;
slang_atom a_name;
- struct slang_operation_ *array_size; /* type: spec_array */
+ GLuint array_len; /* type: spec_array */
struct slang_operation_ *initializer;
unsigned int address;
unsigned int size;
@@ -123,6 +125,27 @@ int slang_variable_copy (slang_variable *, const slang_variable *);
slang_variable *_slang_locate_variable (slang_variable_scope *, slang_atom a_name, GLboolean all);
+typedef struct
+{
+ slang_export_data_quant *quant;
+ char *name;
+} slang_active_uniform;
+
+typedef struct
+{
+ slang_active_uniform *table;
+ GLuint count;
+} slang_active_uniforms;
+
+GLvoid slang_active_uniforms_ctr (slang_active_uniforms *);
+GLvoid slang_active_uniforms_dtr (slang_active_uniforms *);
+GLboolean slang_active_uniforms_add (slang_active_uniforms *, slang_export_data_quant *,
+ const char *);
+
+GLboolean _slang_build_export_data_table (slang_export_data_table *, slang_variable_scope *);
+
+GLboolean _slang_gather_active_uniforms (slang_active_uniforms *, slang_export_data_table *);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/mesa/shader/slang/slang_execute.c b/src/mesa/shader/slang/slang_execute.c
index 22dba0119a7..06f0eefdf60 100644
--- a/src/mesa/shader/slang/slang_execute.c
+++ b/src/mesa/shader/slang/slang_execute.c
@@ -29,6 +29,9 @@
*/
#include "imports.h"
+#include "context.h"
+#include "swrast/s_context.h"
+#include "colormac.h"
#include "slang_utility.h"
#include "slang_assemble.h"
#include "slang_storage.h"
@@ -180,6 +183,9 @@ static void dump_instruction (FILE *f, slang_assembly *a, unsigned int i)
case slang_asm_addr_multiply:
fprintf (f, "addr_multiply");
break;
+ case slang_vec4_tex2d:
+ fprintf (f, "vec4_tex2d");
+ break;
case slang_asm_jump:
fprintf (f, "jump\t%u", a->param[0]);
break;
@@ -251,6 +257,21 @@ static void dump (const slang_assembly_file *file)
#endif
+static void fetch_texel (GLuint sampler, const GLfloat texcoord[4], GLfloat lambda, GLfloat color[4])
+{
+ GET_CURRENT_CONTEXT(ctx);
+ SWcontext *swrast = SWRAST_CONTEXT(ctx);
+ GLchan rgba[4];
+
+ /* XXX: the function pointer is NULL! */
+ swrast->TextureSample[sampler] (ctx, ctx->Texture.Unit[sampler]._Current, 1,
+ (const GLfloat (*)[4]) texcoord, &lambda, &rgba);
+ color[0] = CHAN_TO_FLOAT(rgba[0]);
+ color[1] = CHAN_TO_FLOAT(rgba[1]);
+ color[2] = CHAN_TO_FLOAT(rgba[2]);
+ color[3] = CHAN_TO_FLOAT(rgba[3]);
+}
+
int _slang_execute2 (const slang_assembly_file *file, slang_machine *mach)
{
slang_machine_slot *stack;
@@ -420,6 +441,16 @@ int _slang_execute2 (const slang_assembly_file *file, slang_machine *mach)
stack[mach->sp + 1]._addr *= stack[mach->sp]._addr;
mach->sp++;
break;
+ case slang_asm_vec4_tex2d:
+ {
+ GLfloat st[4] = { stack[mach->sp]._float, stack[mach->sp + 1]._float, 0.0f, 1.0f };
+ GLuint sampler = (GLuint) stack[mach->sp + 2]._float;
+ GLfloat *rgba = &mach->mem[stack[mach->sp + 3]._addr / 4]._float;
+
+ fetch_texel (sampler, st, 0.0f, rgba);
+ }
+ mach->sp += 3;
+ break;
case slang_asm_jump:
mach->ip = a->param[0];
break;
diff --git a/src/mesa/shader/slang/slang_export.c b/src/mesa/shader/slang/slang_export.c
new file mode 100644
index 00000000000..324dee2a407
--- /dev/null
+++ b/src/mesa/shader/slang/slang_export.c
@@ -0,0 +1,292 @@
+/*
+ * Mesa 3-D graphics library
+ * Version: 6.5
+ *
+ * Copyright (C) 2006 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file slang_export.c
+ * interface between assembly code and the application
+ * \author Michal Krol
+ */
+
+#include "imports.h"
+#include "slang_utility.h"
+#include "slang_export.h"
+
+/*
+ * slang_export_data_quant
+ */
+
+GLvoid slang_export_data_quant_ctr (slang_export_data_quant *self)
+{
+ self->name = SLANG_ATOM_NULL;
+ self->size = 0;
+ self->array_len = 0;
+ self->structure = NULL;
+ self->u.basic_type = GL_FLOAT;
+}
+
+GLvoid slang_export_data_quant_dtr (slang_export_data_quant *self)
+{
+ if (self->structure != NULL)
+ {
+ GLuint i;
+
+ for (i = 0; i < self->u.field_count; i++)
+ slang_export_data_quant_dtr (&self->structure[i]);
+ slang_alloc_free (self->structure);
+ }
+}
+
+slang_export_data_quant *slang_export_data_quant_add_field (slang_export_data_quant *self)
+{
+ const GLuint n = self->u.field_count;
+
+ self->structure = (slang_export_data_quant *) slang_alloc_realloc (self->structure,
+ n * sizeof (slang_export_data_quant), (n + 1) * sizeof (slang_export_data_quant));
+ if (self->structure == NULL)
+ return NULL;
+ slang_export_data_quant_ctr (&self->structure[n]);
+ self->u.field_count++;
+ return &self->structure[n];
+}
+
+/*
+ * slang_export_data_entry
+ */
+
+GLvoid slang_export_data_entry_ctr (slang_export_data_entry *self)
+{
+ slang_export_data_quant_ctr (&self->quant);
+ self->access = slang_exp_uniform;
+ self->address = ~0;
+}
+
+GLvoid slang_export_data_entry_dtr (slang_export_data_entry *self)
+{
+ slang_export_data_quant_dtr (&self->quant);
+}
+
+/*
+ * slang_export_data_table
+ */
+
+GLvoid slang_export_data_table_ctr (slang_export_data_table *self)
+{
+ self->entries = NULL;
+ self->count = 0;
+ self->atoms = NULL;
+}
+
+GLvoid slang_export_data_table_dtr (slang_export_data_table *self)
+{
+ if (self->entries != NULL)
+ {
+ GLuint i;
+
+ for (i = 0; i < self->count; i++)
+ slang_export_data_entry_dtr (&self->entries[i]);
+ slang_alloc_free (self->entries);
+ }
+}
+
+slang_export_data_entry *slang_export_data_table_add (slang_export_data_table *self)
+{
+ const GLuint n = self->count;
+
+ self->entries = (slang_export_data_entry *) slang_alloc_realloc (self->entries,
+ n * sizeof (slang_export_data_entry), (n + 1) * sizeof (slang_export_data_entry));
+ if (self->entries == NULL)
+ return NULL;
+ slang_export_data_entry_ctr (&self->entries[n]);
+ self->count++;
+ return &self->entries[n];
+}
+
+/*
+ * _slang_find_exported_data()
+ */
+
+#define EXTRACT_ERROR 0
+#define EXTRACT_BASIC 1
+#define EXTRACT_ARRAY 2
+#define EXTRACT_STRUCT 3
+#define EXTRACT_STRUCT_ARRAY 4
+
+#define EXTRACT_MAXLEN 255
+
+static GLuint extract_name (const char *name, char *parsed, GLuint *element, const char **end)
+{
+ GLuint i;
+
+ if (name[0] >= 'a' && name[0] <= 'z' || name[0] >= 'A' && name[0] <= 'Z' || name[0] == '_')
+ {
+ parsed[0] = name[0];
+
+ for (i = 1; i < EXTRACT_MAXLEN; i++)
+ {
+ if (name[i] >= 'a' && name[i] <= 'z' || name[i] >= 'A' && name[i] <= 'Z' ||
+ name[i] >= '0' && name[i] <= '9' || name[0] == '_')
+ {
+ parsed[i] = name[i];
+ }
+ else
+ {
+ if (name[i] == '\0')
+ {
+ parsed[i] = '\0';
+ return EXTRACT_BASIC;
+ }
+ if (name[i] == '.')
+ {
+ parsed[i] = '\0';
+ *end = &name[i + 1];
+ return EXTRACT_STRUCT;
+ }
+ if (name[i] == '[')
+ {
+ parsed[i] = '\0';
+ i++;
+ if (name[i] >= '0' && name[i] <= '9')
+ {
+ *element = name[i] - '0';
+ for (i++; ; i++)
+ {
+ if (name[i] >= '0' && name[i] <= '9')
+ *element = *element * 10 + (name[i] - '0');
+ else
+ {
+ if (name[i] == ']')
+ {
+ i++;
+ if (name[i] == '.')
+ {
+ *end = &name[i + 1];
+ return EXTRACT_STRUCT_ARRAY;
+ }
+ *end = &name[i];
+ return EXTRACT_ARRAY;
+ }
+ break;
+ }
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ return EXTRACT_ERROR;
+}
+
+static GLboolean validate_extracted (slang_export_data_quant *q, GLuint element, GLuint extr)
+{
+ switch (extr)
+ {
+ case EXTRACT_BASIC:
+ return GL_TRUE;
+ case EXTRACT_ARRAY:
+ return element < q->array_len;
+ case EXTRACT_STRUCT:
+ return q->structure != NULL;
+ case EXTRACT_STRUCT_ARRAY:
+ return q->structure != NULL && element < q->array_len;
+ }
+ return GL_FALSE;
+}
+
+static GLuint calculate_offset (slang_export_data_quant *q, GLuint element)
+{
+ if (q->array_len != 0)
+ return element * q->size;
+ return 0;
+}
+
+static GLboolean find_exported_data (slang_export_data_quant *q, const char *name,
+ slang_export_data_quant **quant, GLuint *offset, slang_atom_pool *atoms)
+{
+ char parsed[EXTRACT_MAXLEN];
+ GLuint result, element, i;
+ const char *end;
+ slang_atom atom;
+
+ result = extract_name (name, parsed, &element, &end);
+ if (result == EXTRACT_ERROR)
+ return GL_FALSE;
+
+ atom = slang_atom_pool_atom (atoms, parsed);
+ if (atom == SLANG_ATOM_NULL)
+ return GL_FALSE;
+
+ for (i = 0; i < q->u.field_count; i++)
+ if (q->structure[i].name == atom)
+ {
+ if (!validate_extracted (&q->structure[i], element, result))
+ return GL_FALSE;
+ *offset += calculate_offset (&q->structure[i], element);
+ if (result == EXTRACT_BASIC || result == EXTRACT_ARRAY)
+ {
+ if (*end != '\0')
+ return GL_FALSE;
+ *quant = &q->structure[i];
+ return GL_TRUE;
+ }
+ return find_exported_data (&q->structure[i], end, quant, offset, atoms);
+ }
+ return GL_FALSE;
+}
+
+GLboolean _slang_find_exported_data (slang_export_data_table *table, const char *name,
+ slang_export_data_entry **entry, slang_export_data_quant **quant, GLuint *offset)
+{
+ char parsed[EXTRACT_MAXLEN];
+ GLuint result, element, i;
+ const char *end;
+ slang_atom atom;
+
+ result = extract_name (name, parsed, &element, &end);
+ if (result == EXTRACT_ERROR)
+ return GL_FALSE;
+
+ atom = slang_atom_pool_atom (table->atoms, parsed);
+ if (atom == SLANG_ATOM_NULL)
+ return GL_FALSE;
+
+ for (i = 0; i < table->count; i++)
+ if (table->entries[i].quant.name == atom)
+ {
+ if (!validate_extracted (&table->entries[i].quant, element, result))
+ return GL_FALSE;
+ *entry = &table->entries[i];
+ *offset = calculate_offset (&table->entries[i].quant, element);
+ if (result == EXTRACT_BASIC || result == EXTRACT_ARRAY)
+ {
+ if (*end != '\0')
+ return GL_FALSE;
+ *quant = &table->entries[i].quant;
+ return GL_TRUE;
+ }
+ return find_exported_data (&table->entries[i].quant, end, quant, offset, table->atoms);
+ }
+ return GL_FALSE;
+}
+
diff --git a/src/mesa/shader/slang/slang_export.h b/src/mesa/shader/slang/slang_export.h
new file mode 100644
index 00000000000..57e7d51279e
--- /dev/null
+++ b/src/mesa/shader/slang/slang_export.h
@@ -0,0 +1,114 @@
+/*
+ * Mesa 3-D graphics library
+ * Version: 6.5
+ *
+ * Copyright (C) 2006 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#if !defined SLANG_EXPORT_H
+#define SLANG_EXPORT_H
+
+#if defined __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Basic data quantity to transfer between application and assembly.
+ * The <size> is the actual size of the data quantity including padding, if any. It is
+ * used to calculate offsets from the beginning of the data.
+ * The <array_len> is not 0, the data quantity is an array of <array_len> size.
+ * If the <structure> is not NULL, the data quantity is a struct. The <basic_type> is
+ * invalid and the <field_count> holds the size of the <structure> array.
+ * The <basic_type> values match those of <type> parameter for glGetActiveUniformARB.
+ */
+
+typedef struct slang_export_data_quant_
+{
+ slang_atom name;
+ GLuint size;
+ GLuint array_len;
+ struct slang_export_data_quant_ *structure;
+ union
+ {
+ GLenum basic_type;
+ GLuint field_count;
+ } u;
+} slang_export_data_quant;
+
+GLvoid slang_export_data_quant_ctr (slang_export_data_quant *);
+GLvoid slang_export_data_quant_dtr (slang_export_data_quant *);
+slang_export_data_quant *slang_export_data_quant_add_field (slang_export_data_quant *);
+
+/*
+ * Data access pattern. Specifies how data is accessed at what frequency.
+ */
+
+typedef enum
+{
+ slang_exp_uniform,
+ slang_exp_varying,
+ slang_exp_attribute
+} slang_export_data_access;
+
+/*
+ * Data export entry. Holds the data type information, access pattern and base address.
+ */
+
+typedef struct
+{
+ slang_export_data_quant quant;
+ slang_export_data_access access;
+ GLuint address;
+} slang_export_data_entry;
+
+GLvoid slang_export_data_entry_ctr (slang_export_data_entry *);
+GLvoid slang_export_data_entry_dtr (slang_export_data_entry *);
+
+/*
+ * Data export table. Holds <count> elements in <entries> array.
+ */
+
+typedef struct
+{
+ slang_export_data_entry *entries;
+ GLuint count;
+ slang_atom_pool *atoms;
+} slang_export_data_table;
+
+GLvoid slang_export_data_table_ctr (slang_export_data_table *);
+GLvoid slang_export_data_table_dtr (slang_export_data_table *);
+slang_export_data_entry *slang_export_data_table_add (slang_export_data_table *);
+
+/*
+ * _slang_find_exported_data()
+ *
+ * Parses the name string and returns corresponding data entry, data quantity and offset.
+ * Returns GL_TRUE if the data is found, returns GL_FALSE otherwise.
+ */
+
+GLboolean _slang_find_exported_data (slang_export_data_table *, const char *,
+ slang_export_data_entry **, slang_export_data_quant **, GLuint *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c
new file mode 100644
index 00000000000..c4303ac020d
--- /dev/null
+++ b/src/mesa/shader/slang/slang_link.c
@@ -0,0 +1,186 @@
+/*
+ * Mesa 3-D graphics library
+ * Version: 6.5
+ *
+ * Copyright (C) 2006 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file slang_link.c
+ * slang linker
+ * \author Michal Krol
+ */
+
+#include "imports.h"
+#include "slang_utility.h"
+#include "slang_compile.h"
+#include "slang_export.h"
+#include "slang_link.h"
+
+/*
+ * slang_uniform_bindings
+ */
+
+static GLvoid slang_uniform_bindings_ctr (slang_uniform_bindings *self)
+{
+ self->table = NULL;
+ self->count = 0;
+}
+
+static GLvoid slang_uniform_bindings_dtr (slang_uniform_bindings *self)
+{
+ GLuint i;
+
+ for (i = 0; i < self->count; i++)
+ slang_alloc_free (self->table[i].name);
+ slang_alloc_free (self->table);
+}
+
+static GLboolean slang_uniform_bindings_add (slang_uniform_bindings *self, slang_export_data_quant *q,
+ const char *name, GLuint index, GLuint address)
+{
+ const GLuint n = self->count;
+ GLuint i;
+
+ for (i = 0; i < n; i++)
+ if (slang_string_compare (self->table[i].name, name) == 0)
+ {
+ self->table[i].address[index] = address;
+ return GL_TRUE;
+ }
+
+ self->table = (slang_uniform_binding *) slang_alloc_realloc (self->table,
+ n * sizeof (slang_uniform_binding), (n + 1) * sizeof (slang_uniform_binding));
+ if (self->table == NULL)
+ return GL_FALSE;
+ self->table[n].quant = q;
+ self->table[n].name = slang_string_duplicate (name);
+ for (i = 0; i < SLANG_UNIFORM_BINDING_MAX; i++)
+ self->table[n].address[i] = ~0;
+ self->table[n].address[index] = address;
+ if (self->table[n].name == NULL)
+ return GL_FALSE;
+ self->count++;
+ return GL_TRUE;
+}
+
+static GLboolean insert_binding (slang_uniform_bindings *bind, slang_export_data_quant *q,
+ char *name, slang_atom_pool *atoms, GLuint index, GLuint addr)
+{
+ GLuint count, i;
+
+ slang_string_concat (name, slang_atom_pool_id (atoms, q->name));
+
+ if (q->array_len == 0)
+ count = 1;
+ else
+ count = q->array_len;
+
+ for (i = 0; i < count; i++)
+ {
+ GLuint save;
+
+ save = slang_string_length (name);
+ if (q->array_len != 0)
+ _mesa_sprintf (name + slang_string_length (name), "[%d]", i);
+
+ if (q->structure != NULL)
+ {
+ GLuint save, i;
+
+ slang_string_concat (name, ".");
+ save = slang_string_length (name);
+
+ for (i = 0; i < q->u.field_count; i++)
+ {
+ if (!insert_binding (bind, &q->structure[i], name, atoms, index, addr))
+ return GL_FALSE;
+ name[save] = '\0';
+ addr += q->structure[i].size;
+ }
+ }
+ else
+ {
+ if (!slang_uniform_bindings_add (bind, q, name, index, addr))
+ return GL_FALSE;
+ addr += q->size;
+ }
+ name[save] = '\0';
+ }
+
+ return GL_TRUE;
+}
+
+static GLboolean gather_uniform_bindings (slang_uniform_bindings *bind, slang_export_data_table *tbl,
+ GLuint index)
+{
+ GLuint i;
+
+ for (i = 0; i < tbl->count; i++)
+ {
+ char name[1024] = "";
+
+ if (!insert_binding (bind, &tbl->entries[i].quant, name, tbl->atoms, index,
+ tbl->entries[i].address))
+ return GL_FALSE;
+ }
+
+ return GL_TRUE;
+}
+
+/*
+ * slang_program
+ */
+
+GLvoid slang_program_ctr (slang_program *self)
+{
+ slang_uniform_bindings_ctr (&self->uniforms);
+}
+
+GLvoid slang_program_dtr (slang_program *self)
+{
+ slang_uniform_bindings_dtr (&self->uniforms);
+}
+
+/*
+ * _slang_link()
+ */
+
+GLboolean _slang_link (slang_program *prog, slang_translation_unit **units, GLuint count)
+{
+ GLuint i;
+
+ for (i = 0; i < count; i++)
+ {
+ GLuint index;
+
+ if (units[i]->type == slang_unit_fragment_shader)
+ index = SLANG_UNIFORM_BINDING_FRAGMENT;
+ else
+ index = SLANG_UNIFORM_BINDING_VERTEX;
+
+ if (!gather_uniform_bindings (&prog->uniforms, &units[i]->exp_data, index))
+ return GL_FALSE;
+ prog->machines[index] = units[i]->machine;
+ }
+
+ return GL_TRUE;
+}
+
diff --git a/src/mesa/shader/slang/slang_link.h b/src/mesa/shader/slang/slang_link.h
new file mode 100644
index 00000000000..7395c77c5df
--- /dev/null
+++ b/src/mesa/shader/slang/slang_link.h
@@ -0,0 +1,68 @@
+/*
+ * Mesa 3-D graphics library
+ * Version: 6.5
+ *
+ * Copyright (C) 2006 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#if !defined SLANG_LINK_H
+#define SLANG_LINK_H
+
+#include "slang_assemble.h"
+#include "slang_execute.h"
+
+#if defined __cplusplus
+extern "C" {
+#endif
+
+#define SLANG_UNIFORM_BINDING_VERTEX 0
+#define SLANG_UNIFORM_BINDING_FRAGMENT 1
+#define SLANG_UNIFORM_BINDING_MAX 2
+
+typedef struct
+{
+ slang_export_data_quant *quant;
+ char *name;
+ GLuint address[SLANG_UNIFORM_BINDING_MAX];
+} slang_uniform_binding;
+
+typedef struct
+{
+ slang_uniform_binding *table;
+ GLuint count;
+} slang_uniform_bindings;
+
+typedef struct
+{
+ slang_uniform_bindings uniforms;
+ slang_machine *machines[SLANG_UNIFORM_BINDING_MAX];
+} slang_program;
+
+GLvoid slang_program_ctr (slang_program *);
+GLvoid slang_program_dtr (slang_program *);
+
+GLboolean _slang_link (slang_program *, slang_translation_unit **, GLuint);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/src/mesa/shader/slang/slang_storage.c b/src/mesa/shader/slang/slang_storage.c
index 2654ee0404b..4afee2ccc79 100644
--- a/src/mesa/shader/slang/slang_storage.c
+++ b/src/mesa/shader/slang/slang_storage.c
@@ -130,13 +130,13 @@ static GLboolean aggregate_variables (slang_storage_aggregate *agg, slang_variab
for (i = 0; i < vars->num_variables; i++)
if (!_slang_aggregate_variable (agg, &vars->variables[i].type.specifier,
- vars->variables[i].array_size, funcs, structs, globals, mach, file, atoms))
+ vars->variables[i].array_len, funcs, structs, globals, mach, file, atoms))
return GL_FALSE;
return GL_TRUE;
}
-static GLboolean eval_array_size (slang_assembly_file *file, slang_machine *pmach,
- slang_assembly_name_space *space, slang_operation *array_size, GLuint *plength,
+GLboolean _slang_evaluate_int (slang_assembly_file *file, slang_machine *pmach,
+ slang_assembly_name_space *space, slang_operation *array_size, GLuint *pint,
slang_atom_pool *atoms)
{
slang_assembly_file_restore_point point;
@@ -166,7 +166,7 @@ static GLboolean eval_array_size (slang_assembly_file *file, slang_machine *pmac
return GL_FALSE;
/* insert the actual expression */
- if (!_slang_assemble_operation_ (&A, array_size, slang_ref_forbid))
+ if (!_slang_assemble_operation (&A, array_size, slang_ref_forbid))
return GL_FALSE;
if (!slang_assembly_file_push (file, slang_asm_exit))
return GL_FALSE;
@@ -176,8 +176,7 @@ static GLboolean eval_array_size (slang_assembly_file *file, slang_machine *pmac
return GL_FALSE;
/* the evaluated expression is on top of the stack */
- *plength = (GLuint) mach.mem[mach.sp + SLANG_MACHINE_GLOBAL_SIZE]._float;
- /* TODO: check if 0 < arr->length <= 65535 */
+ *pint = (GLuint) mach.mem[mach.sp + SLANG_MACHINE_GLOBAL_SIZE]._float;
/* restore the old assembly */
if (!slang_assembly_file_restore_point_load (file, &point))
@@ -187,7 +186,7 @@ static GLboolean eval_array_size (slang_assembly_file *file, slang_machine *pmac
}
GLboolean _slang_aggregate_variable (slang_storage_aggregate *agg, slang_type_specifier *spec,
- slang_operation *array_size, slang_function_scope *funcs, slang_struct_scope *structs,
+ GLuint array_len, slang_function_scope *funcs, slang_struct_scope *structs,
slang_variable_scope *vars, slang_machine *mach, slang_assembly_file *file,
slang_atom_pool *atoms)
{
@@ -236,7 +235,6 @@ GLboolean _slang_aggregate_variable (slang_storage_aggregate *agg, slang_type_sp
case slang_spec_array:
{
slang_storage_array *arr;
- slang_assembly_name_space space;
arr = slang_storage_aggregate_push_new (agg);
if (arr == NULL)
@@ -251,14 +249,11 @@ GLboolean _slang_aggregate_variable (slang_storage_aggregate *agg, slang_type_sp
arr->aggregate = NULL;
return GL_FALSE;
}
- if (!_slang_aggregate_variable (arr->aggregate, spec->_array, NULL, funcs, structs,
+ if (!_slang_aggregate_variable (arr->aggregate, spec->_array, 0, funcs, structs,
vars, mach, file, atoms))
return GL_FALSE;
- space.funcs = funcs;
- space.structs = structs;
- space.vars = vars;
- if (!eval_array_size (file, mach, &space, array_size, &arr->length, atoms))
- return GL_FALSE;
+ arr->length = array_len;
+ /* TODO: check if 0 < arr->length <= 65535 */
}
return GL_TRUE;
default:
diff --git a/src/mesa/shader/slang/slang_storage.h b/src/mesa/shader/slang/slang_storage.h
index 84206d01563..2a1ddffa0c2 100644
--- a/src/mesa/shader/slang/slang_storage.h
+++ b/src/mesa/shader/slang/slang_storage.h
@@ -85,9 +85,12 @@ GLboolean slang_storage_aggregate_construct (slang_storage_aggregate *);
GLvoid slang_storage_aggregate_destruct (slang_storage_aggregate *);
GLboolean _slang_aggregate_variable (slang_storage_aggregate *, struct slang_type_specifier_ *,
- struct slang_operation_ *, struct slang_function_scope_ *, slang_struct_scope *,
+ GLuint, struct slang_function_scope_ *, slang_struct_scope *,
slang_variable_scope *, struct slang_machine_ *, struct slang_assembly_file_ *,
- slang_atom_pool *);
+ slang_atom_pool *);
+
+GLboolean _slang_evaluate_int (struct slang_assembly_file_ *, struct slang_machine_ *,
+ struct slang_assembly_name_space_ *, struct slang_operation_ *, GLuint *, slang_atom_pool *);
/*
* Returns total size (in machine units) of the given aggregate.
diff --git a/src/mesa/sources b/src/mesa/sources
index 250e44d49b6..dfef696d2dd 100644
--- a/src/mesa/sources
+++ b/src/mesa/sources
@@ -200,7 +200,9 @@ SLANG_SOURCES = \
shader/slang/slang_compile_struct.c \
shader/slang/slang_compile_variable.c \
shader/slang/slang_execute.c \
+ shader/slang/slang_export.c \
shader/slang/slang_library_noise.c \
+ shader/slang/slang_link.c \
shader/slang/slang_preprocess.c \
shader/slang/slang_storage.c \
shader/slang/slang_utility.c